]> git.ipfire.org Git - thirdparty/gnulib.git/log
thirdparty/gnulib.git
107 min agosigprocmask: Support multithreaded applications on native Windows. master
Bruno Haible [Fri, 10 Apr 2026 15:22:07 +0000 (17:22 +0200)] 
sigprocmask: Support multithreaded applications on native Windows.

* lib/signal.in.h (WIN_PTHREADS_SIGNAL_H): New macro.
* lib/sigprocmask.c: Include windows-spin.h.
(thread_local): New macro.
(blocked_set, pending_array): Mark as thread-local.
(blocked_handler): Remove function.
(struct override): New type.
(overrides, overrides_lock): New variables.
(override_handler): New function.
(pthread_sigmask): New function, borrowing from the previous sigprocmask
definition.
(sigprocmask): Now a wrapper around pthread_sigmask.
(rpl_signal): Use the overrides_lock to make it multithread-safe.
(_gl_raise_SIGPIPE): Add comments.
* modules/sigprocmask (Depends-on): Add windows-spin.
* lib/pthread_sigmask.c: Revert last change. On native Windows, don't
define pthread_sigmask here.
* modules/pthread_sigmask (Depends-on): Remove lock.
* NEWS: Remove the last entry.

4 days agostat: Update doc regarding mingw bug.
Bruno Haible [Mon, 6 Apr 2026 11:38:22 +0000 (13:38 +0200)] 
stat: Update doc regarding mingw bug.

* doc/posix-functions/stat.texi: Update regarding mingw bug.

4 days agombrtowc, mbrtoc32: Silence -Wshadow warnings (regr. 2026-04-02).
Bruno Haible [Mon, 6 Apr 2026 11:21:56 +0000 (13:21 +0200)] 
mbrtowc, mbrtoc32: Silence -Wshadow warnings (regr. 2026-04-02).

Reported by Collin Funk.

* lib/mbrtowc.c (rpl_mbrtowc): Enclose the #include in a block.
* lib/mbrtoc32.c (mbrtoc32): Likewise.

4 days agosigprocmask: add NEWS entry
Paul Eggert [Sun, 5 Apr 2026 22:20:39 +0000 (15:20 -0700)] 
sigprocmask: add NEWS entry

4 days agoterm-style-control: use pthread_sigmask
Paul Eggert [Sun, 5 Apr 2026 18:29:48 +0000 (11:29 -0700)] 
term-style-control: use pthread_sigmask

* lib/term-style-control.c (block_relevant_signals)
(unblock_relevant_signals): Prefer pthread_sigmask to sigprocmask.
* modules/term-style-control (Depends-on):
Depend on pthread_sigmask, not on sigprocmask.

4 days agofatal-signal: use pthread_sigmask
Paul Eggert [Sun, 5 Apr 2026 18:28:19 +0000 (11:28 -0700)] 
fatal-signal: use pthread_sigmask

* lib/fatal-signal.c (block_fatal_signals)
(unblock_fatal_signals): Prefer pthread_sigmask to sigprocmask.
* modules/fatal-signal (Depends-on):
Depend on pthread_sigmask, not on sigprocmask.

4 days agosigaction: use pthread_sigmask
Paul Eggert [Sun, 5 Apr 2026 18:26:56 +0000 (11:26 -0700)] 
sigaction: use pthread_sigmask

* lib/sigaction.c (sigaction_handler, sigaction):
Use pthread_sigmask, not sigprocmask.
* modules/sigaction (Depends-on):
Depend on pthread_sigmask, not on sigprocmask.

4 days agopthread_sigmask: lock here, not in sigprocmask
Paul Eggert [Sun, 5 Apr 2026 18:25:05 +0000 (11:25 -0700)] 
pthread_sigmask: lock here, not in sigprocmask

Since sigprocmask should now be used only in single-threaded processes,
move the locking from lib/sigprocmask.c to lib/pthread_sigmask.c.
* lib/pthread_sigmask.c: If !HAVE_SIGPROCMASK &&
!GNULIB_PTHREAD_SIGMASK_SINGLE_THREAD, replace Gnulib sigprocmask
with a thread-safe subsitute sigprocmask_r.
Include glthread/lock.h to implement this.
* lib/sigprocmask.c (gl_lock_define_initialized, gl_lock_lock)
(gl_lock_unlock, sig_lock): Remove.  All uses removed.
Do not include glthread/lock.h.
* m4/signalblocking.m4 (gl_SIGNALBLOCKING):
Define HAVE_SIGPROCMASK, for the benefit of pthread_sigmask.c.
* modules/pthread_sigmask (Depends-on): Add ‘lock’.
* modules/sigprocmask (Depends-on): Remove ‘lock’.

5 days agomcel: remove forced use of GLIBC's mbrtoc32
Pádraig Brady [Sun, 5 Apr 2026 11:30:21 +0000 (12:30 +0100)] 
mcel: remove forced use of GLIBC's mbrtoc32

This is a performance win on GLIBC,
as tested on the coreutils multi-byte update to cut(1):

   $ yes $(yes éééááé | head -n9 | paste -s -d,) |
     head -n1M > mb.in

   $ time LC_ALL=C.UTF-8 src/cut-before -c1 mb.in >/dev/null
   real    0m1.582s

   $ time LC_ALL=C.UTF-8 src/cut-after -c1 mb.in >/dev/null
   real    0m0.592s

* lib/mcel.h: While GLIBC's mbrtoc32 is functional for mcel,
it is seen to be 2.6x slower than gnulib's implementation
due to GLIBC's per call locale handling.

5 days agoposix_spawn-internal: Remove a FIXME.
Bruno Haible [Sat, 4 Apr 2026 21:17:59 +0000 (23:17 +0200)] 
posix_spawn-internal: Remove a FIXME.

* lib/spawni.c (__spawni): Add comment regarding sigprocmask.

5 days agolinked-list-unportable-tests: Prefer pthread_sigmask over sigprocmask.
Bruno Haible [Sat, 4 Apr 2026 20:55:34 +0000 (22:55 +0200)] 
linked-list-unportable-tests: Prefer pthread_sigmask over sigprocmask.

Suggested by Paul Eggert.

* tests/test-asyncsafe-linked_list-strong.c (block_sigint): Use
pthread_sigmask instead of sigprocmask.
* tests/test-asyncsafe-linked_list-weak.c (block_sigint): Likewise.

5 days agoasyncsafe-spin: Prefer pthread_sigmask over sigprocmask.
Bruno Haible [Sat, 4 Apr 2026 20:44:10 +0000 (22:44 +0200)] 
asyncsafe-spin: Prefer pthread_sigmask over sigprocmask.

Suggested by Paul Eggert.

* lib/asyncsafe-spin.c (asyncsafe_spin_lock, asyncsafe_spin_unlock): Use
pthread_sigmask instead of sigprocmask.
* modules/asyncsafe-spin (Depends-on): Add pthread_sigmask. Remove
sigprocmask.
(Link): New section.
* modules/asyncsafe-spin-tests (Makefile.am): Link test-asyncsafe-spin1
with $(PTHREAD_SIGMASK_LIB).
* modules/jit/cache-tests (Makefile.am): Link test-cache with
$(PTHREAD_SIGMASK_LIB).

5 days agospawn-pipe: Prefer pthread_sigmask over sigprocmask.
Bruno Haible [Sat, 4 Apr 2026 20:26:25 +0000 (22:26 +0200)] 
spawn-pipe: Prefer pthread_sigmask over sigprocmask.

Suggested by Paul Eggert.

* lib/spawn-pipe.c (execute): Use pthread_sigmask to get the set of
blocked signals.
* modules/spawn-pipe (Depends-on): Add pthread_sigmask.

5 days agoexecute: Prefer pthread_sigmask over sigprocmask.
Bruno Haible [Sat, 4 Apr 2026 20:15:24 +0000 (22:15 +0200)] 
execute: Prefer pthread_sigmask over sigprocmask.

Suggested by Paul Eggert.

* lib/execute.c (execute): Use pthread_sigmask to get the set of blocked
signals.
* modules/execute (Depends-on): Add pthread_sigmask.

5 days agosigpipe-die: Relax specification.
Bruno Haible [Sat, 4 Apr 2026 20:01:56 +0000 (22:01 +0200)] 
sigpipe-die: Relax specification.

* lib/sigpipe-die.h (install_sigpipe_die_handler): Clarify how to use
this function in a multithreaded program.

6 days agopthread_sigmask: Make it usable without -lpthread on most platforms.
Bruno Haible [Sat, 4 Apr 2026 13:16:44 +0000 (15:16 +0200)] 
pthread_sigmask: Make it usable without -lpthread on most platforms.

* m4/pthread_sigmask.m4 (gl_FUNC_PTHREAD_SIGMASK): Define
PTHREAD_SIGMASK_LIB to empty, except on AIX. Define
PTHREAD_SIGMASK_NOT_IN_LIBC if a workaround is needed.
* lib/pthread_sigmask.c (pthread_sigmask): If
PTHREAD_SIGMASK_NOT_IN_LIBC, just use sigprocmask.
* doc/posix-functions/pthread_sigmask.texi: Mention the dropped link
requirement. Mention that the NetBSD 9 bug is fixed.
* doc/posix-functions/sigprocmask.texi: Update note relating to
pthread_sigmask.

6 days agopthread_sigmask: Don't force an override on NetBSD.
Bruno Haible [Sat, 4 Apr 2026 13:16:31 +0000 (15:16 +0200)] 
pthread_sigmask: Don't force an override on NetBSD.

* m4/pthread_sigmask.m4 (gl_FUNC_PTHREAD_SIGMASK): Limit the macro test
to native Windows.

6 days agopthread_sigmask tests: Enable all tests on NetBSD.
Bruno Haible [Sat, 4 Apr 2026 13:16:17 +0000 (15:16 +0200)] 
pthread_sigmask tests: Enable all tests on NetBSD.

* modules/pthread_sigmask-tests (Depends-on): Remove test-xfail.
(Makefile.am): Don't test OS_IS_NETBSD.

6 days agosigprocmask: document race bugs on macOS
Paul Eggert [Sat, 4 Apr 2026 02:55:48 +0000 (19:55 -0700)] 
sigprocmask: document race bugs on macOS

In documentation and comments, mention macOS sigprocmask
incompatibility with GNU and most other systems, and note Gnulib
uses of sigprocmask that can cause subtle race condition bugs on
macOS.  Although an obvious fix is to switch to pthread_sigmask as
POSIX suggests, that will require some changing to linking
instructions, and the first step is documentation.

6 days agosigprocmask: single-thread optimization typo fix
Paul Eggert [Fri, 3 Apr 2026 18:22:54 +0000 (11:22 -0700)] 
sigprocmask: single-thread optimization typo fix

* lib/sigprocmask.c (gl_lock_define_initialized):
Swap #if’s then- and else-parts.

7 days agombrtoc32: Optimize single-locale case on glibc systems.
Bruno Haible [Thu, 2 Apr 2026 19:59:58 +0000 (21:59 +0200)] 
mbrtoc32: Optimize single-locale case on glibc systems.

Suggested by Pádraig Brady.

* lib/mbrtoc32.c (is_locale_utf8, cached_is_locale_utf8,
is_locale_utf8_cached): New functions/variable, copied from
lib/wcwidth.c.
(mbrtoc32): If GNULIB_WCHAR_SINGLE_LOCALE is defined, optimize the
frequent case of an UTF-8 locale on glibc systems.

7 days agombrtowc: Optimize single-locale case on glibc systems.
Bruno Haible [Thu, 2 Apr 2026 19:58:36 +0000 (21:58 +0200)] 
mbrtowc: Optimize single-locale case on glibc systems.

Suggested by Pádraig Brady.

* lib/mbrtowc.c (is_locale_utf8, cached_is_locale_utf8,
is_locale_utf8_cached): New functions/variable, copied from
lib/wcwidth.c.
(rpl_mbrtowc): If GNULIB_WCHAR_SINGLE_LOCALE is defined, optimize the
frequent case of an UTF-8 locale on glibc systems.

8 days agosigprocmask: Allow single-thread optimization in a more reliable way.
Bruno Haible [Wed, 1 Apr 2026 20:45:55 +0000 (22:45 +0200)] 
sigprocmask: Allow single-thread optimization in a more reliable way.

* modules/sigprocmask: Revert last change.
* lib/sigprocmask.c: Test GNULIB_SIGPROCMASK_SINGLE_THREAD before
including glthread/lock.h.
* doc/multithread.texi: Document GNULIB_SIGPROCMASK_SINGLE_THREAD.

8 days agolock: Document backward-incompatible change from yesterday.
Bruno Haible [Wed, 1 Apr 2026 20:33:56 +0000 (22:33 +0200)] 
lock: Document backward-incompatible change from yesterday.

* NEWS: Add note about 'lock' module.

8 days agogettext-h: Revert most of last change.
Bruno Haible [Wed, 1 Apr 2026 20:20:21 +0000 (22:20 +0200)] 
gettext-h: Revert most of last change.

* m4/gettext_h.m4 (gl_GETTEXT_H): Revert last change.
* lib/gettext.h: Revert last change.
(LC_MESSAGES): Define fallback like in locale.in.h.

8 days agombs_endswith, mbs_startswith: port to mcel-prefer
Paul Eggert [Wed, 1 Apr 2026 18:41:53 +0000 (11:41 -0700)] 
mbs_endswith, mbs_startswith: port to mcel-prefer

* lib/mbs_endswith.c (mbs_endswith):
* lib/mbs_startswith.c (mbs_startswith):
If GNULIB_MCEL_PREFER, prefer the mcel.h API and semantics.

8 days agoyesno: treat unlocking similarly if !ENABLE_NLS
Paul Eggert [Wed, 1 Apr 2026 18:34:42 +0000 (11:34 -0700)] 
yesno: treat unlocking similarly if !ENABLE_NLS

If the application is using unlocked-io, do that in the
!ENABLE_NLS case too.  This is more for consistency than for
performance in the typical case.
* lib/yesno.c [USE_UNLOCKED_IO]: Include unlocked-io.h.

9 days agoautoupdate
Karl Berry [Wed, 1 Apr 2026 14:12:55 +0000 (07:12 -0700)] 
autoupdate

9 days agosigprocmask: allow --avoid=lock
Paul Eggert [Wed, 1 Apr 2026 02:54:46 +0000 (19:54 -0700)] 
sigprocmask: allow --avoid=lock

* modules/sigprocmask (Files): Add lib/glthread/lock.h,
so that this module works even if the lock module is avoided.
This is useful for gzip, which does not use multithreading.

9 days agothread: lessen glthread namespace pollution
Paul Eggert [Wed, 1 Apr 2026 02:51:36 +0000 (19:51 -0700)] 
thread: lessen glthread namespace pollution

In lib/glthread/*.h, avoid including files if it’s easy, and if
the files are not needed in the .h file to implement the module.
* lib/glthread/cond.h: Include glthread/lock.h only if needed.
* lib/glthread/lock.c, lib/glthread/once.c: Include <errno.h> here ...
* lib/glthread/lock.h, lib/glthread/once.h: ... instead of here.
* lib/glthread/lock.h: Include glthread/once.h only if needed.
* lib/glthread/yield.h: Don’t include <errno.h>.

9 days agogettext-h: don’t depend on locale-h
Paul Eggert [Tue, 31 Mar 2026 23:38:47 +0000 (16:38 -0700)] 
gettext-h: don’t depend on locale-h

This is useful for apps like gzip.h that stay in the C locale
and don’t need all the the locale-h machinery.
* lib/gettext.h: Include <locale.h> only if !ENABLE_NLS && __sun.
(pgettext, dpgettext, npgettext, dnpgettext, pgettext_expr)
(npgettext_expr): Use _GL_LC_MESSAGES, not LC_MESSAGES.
* m4/gettext_h.m4 (gl_GETTEXT_H): Define _GL_LC_MESSAGES.
* modules/gettext-h (Depends-on): Remove locale-h.

10 days agofenv-exceptions-trapping: Work around mingw 14.0.0 bug.
Bruno Haible [Tue, 31 Mar 2026 06:44:44 +0000 (08:44 +0200)] 
fenv-exceptions-trapping: Work around mingw 14.0.0 bug.

* doc/glibc-functions/feenableexcept.texi: Mention the mingw 14.0.0 bug.

10 days agofenv-exceptions-trapping: Work around mingw 14.0.0 bug.
Bruno Haible [Mon, 30 Mar 2026 20:12:50 +0000 (22:12 +0200)] 
fenv-exceptions-trapping: Work around mingw 14.0.0 bug.

* m4/fenv-exceptions-trapping.m4 (gl_FENV_EXCEPTIONS_TRAPPING): Override
feenableexcept, fedisableexcept also on mingw.

11 days agorenameatu tests: Enhance test of the RENAME_* macros.
Bruno Haible [Mon, 30 Mar 2026 10:19:35 +0000 (12:19 +0200)] 
renameatu tests: Enhance test of the RENAME_* macros.

* tests/test-renameatu.c (main): Test that the RENAME_* macro values are
disjoint.

11 days agorenameatu tests: Test that the RENAME_* macros are defined.
Collin Funk [Mon, 30 Mar 2026 03:29:48 +0000 (20:29 -0700)] 
renameatu tests: Test that the RENAME_* macros are defined.

* tests/test-renameatu.c (main): Test that the RENAME_* macros are
defined and unique.

11 days agorenameatu: Ensure all RENAME_* macros are defined.
Collin Funk [Mon, 30 Mar 2026 03:27:33 +0000 (20:27 -0700)] 
renameatu: Ensure all RENAME_* macros are defined.

* lib/renameatu.h (RENAME_EXCHANGE) [!RENAME_EXCHANGE]: Define macro.
(RENAME_WHITEOUT) [!RENAME_WHITEOUT]: Likewise.

2 weeks agognu-web-doc-update: Add an environment variable for the CVS username
Collin Funk [Fri, 27 Mar 2026 02:59:19 +0000 (19:59 -0700)] 
gnu-web-doc-update: Add an environment variable for the CVS username

* build-aux/gnu-web-doc-update (help): Mention the SAVANNAH_CVS_USER
environment variable.
($cvs_user): Use the SAVANNAH_CVS_USER environment variable and fallback
to USER if it is unset or empty.

2 weeks agodoc: Mention a Solaris 11.4 bug.
Collin Funk [Wed, 25 Mar 2026 03:11:36 +0000 (20:11 -0700)] 
doc: Mention a Solaris 11.4 bug.

* doc/posix-functions/open.texi: Mention that Solaris 11.4 sets errno to
EINVAL instead of EISDIR when open is called on a directory with
O_CREAT.
* doc/posix-functions/openat.texi: Likewise.

2 weeks agoFix typos in recent ChangeLog entry.
Bruno Haible [Sat, 21 Mar 2026 10:40:36 +0000 (11:40 +0100)] 
Fix typos in recent ChangeLog entry.

2 weeks agovasprintf-posix, vasprintf, stdio-windows: Prefer AC_CHECK_FUNCS_ONCE.
Collin Funk [Sat, 21 Mar 2026 01:43:34 +0000 (18:43 -0700)] 
vasprintf-posix, vasprintf, stdio-windows: Prefer AC_CHECK_FUNCS_ONCE.

* m4/vasprintf-posix.m4 (gl_FUNC_VASPRINTF_IS_POSIX): Use
AC_CHECK_FUNCS_ONCE instead of AC_CHECK_FUNCS.
* m4/vasprintf.m4 (gl_FUNC_VASPRINTF): Likewise.
* modules/stdio-windows: Likewise.

2 weeks agonstrftime: revert size typo non-fix
Paul Eggert [Fri, 20 Mar 2026 23:24:48 +0000 (16:24 -0700)] 
nstrftime: revert size typo non-fix

(Thanks to Bruno Haible.)

2 weeks agobyteswap: depend on stdbit-h, not stdint-h
Paul Eggert [Fri, 20 Mar 2026 22:31:37 +0000 (15:31 -0700)] 
byteswap: depend on stdbit-h, not stdint-h

* lib/byteswap.in.h: Do not include stdint.h, as stdbit.h suffices.
* modules/byteswap (Depends-on): Depend on stdbit-h, not stdint-h.

2 weeks agocountof-h: use countof, part 3
Paul Eggert [Fri, 20 Mar 2026 21:41:55 +0000 (14:41 -0700)] 
countof-h: use countof, part 3

* lib/nproc.c, lib/regex_internal.h, lib/set-permissions.c:
* lib/strftime.c:
Include <stdcountof.h>.
* lib/nproc.c (ARRAY_SIZE):
* lib/sig2str.c (NUNNAME_ENTRIES):
Remove.  All uses replaced with countof.
* lib/regcomp.c (regerror):
* lib/set-permissions.c (set_acls_from_mode):
* lib/strftime.c (__strftime_internal):
Use countof instead of doing it by hand.
* modules/acl-permissions, modules/c-nstrftime, modules/fprintftime:
* modules/nproc, modules/regex, modules/nstrftime:
* modules/nstrftime-limited, modules/sig2str:
Depend on stdcountof-h.

2 weeks agoboot-time: remove SIZEOF
Paul Eggert [Fri, 20 Mar 2026 21:30:53 +0000 (14:30 -0700)] 
boot-time: remove SIZEOF

* lib/boot-time-aux.h (SIZEOF): Remove; no longer used,
now that the code uses countof.

2 weeks agonstrftime: fix size typo when compiling for glibc
Paul Eggert [Fri, 20 Mar 2026 20:56:29 +0000 (13:56 -0700)] 
nstrftime: fix size typo when compiling for glibc

* lib/strftime.c (c_weekday_names, c_month_names) [COMPILE_WIDE]:
Fix size typo.

3 weeks agostdbit-h: don’t generate some dummy .o files
Paul Eggert [Mon, 16 Mar 2026 22:17:26 +0000 (15:17 -0700)] 
stdbit-h: don’t generate some dummy .o files

On recent GNU and other C23ish platforms, do not compile files
like lib/stdc_bit_ceil.c, as the corresponding .o files contain
nothing useful.
* m4/stdbit_h.m4 (gl_STDBIT_H):
Define the Automake condition GL_HAVE_STDBIT_H.
Quote cache variables in case the cache is bad.
* modules/stdc_bit_ceil, modules/stdc_bit_floor:
* modules/stdc_bit_width, modules/stdc_count_ones:
* modules/stdc_count_zeros, modules/stdc_first_leading_one:
* modules/stdc_first_leading_zero:
* modules/stdc_first_trailing_one:
* modules/stdc_first_trailing_zero, modules/stdc_has_single_bit:
* modules/stdc_leading_ones, modules/stdc_leading_zeros:
* modules/stdc_trailing_ones, modules/stdc_trailing_zeros:
Generate if !GL_HAVE_STDBIT_H, not if GL_GENERATE_STDBIT_H.

3 weeks agocygpath: Add reminder to include <config.h>.
Collin Funk [Mon, 16 Mar 2026 19:25:28 +0000 (12:25 -0700)] 
cygpath: Add reminder to include <config.h>.

* lib/cygpath.h: Check that config.h was already included so
_GL_ATTRIBUTE_MALLOC and _GL_ATTRIBUTE_DEALLOC_FREE are defined.

3 weeks agostdc_memrevers8u: Add comment.
Bruno Haible [Mon, 16 Mar 2026 19:42:58 +0000 (20:42 +0100)] 
stdc_memrevers8u: Add comment.

* lib/stdbit.in.h (stdc_memreverse8u*): Add comment regarding
uint_leastN_t.

3 weeks agostdbit-h: Make code more readable and typo-proof.
Bruno Haible [Mon, 16 Mar 2026 19:30:13 +0000 (20:30 +0100)] 
stdbit-h: Make code more readable and typo-proof.

* lib/stdbit.in.h (stdc_load8_beu16, stdc_load8_beu32, stdc_load8_beu64,
stdc_load8_leu16, stdc_load8_leu32, stdc_load8_leu64): Avoid declaring
multiple variables in one declaration.

3 weeks agostdbit-h: don’t memcpy on oddball hosts
Paul Eggert [Mon, 16 Mar 2026 19:18:23 +0000 (12:18 -0700)] 
stdbit-h: don’t memcpy on oddball hosts

Mostly-theoretical problem reported by Lasse Collin in:
https://lists.gnu.org/r/bug-gnulib/2026-03/msg00135.html
* lib/stdbit.in.h (_GL_STDBIT_OPTIMIZE_VIA_MEMCPY):
Do not define to 1 on oddball hosts.

3 weeks agostdbit-h: be clearer about castless conversion
Paul Eggert [Mon, 16 Mar 2026 16:10:00 +0000 (09:10 -0700)] 
stdbit-h: be clearer about castless conversion

* lib/stdbit.in.h (stdc_load8_beu16, stdc_load8_beu32)
(stdc_load8_beu64, stdc_load8_leu16, stdc_load8_leu32)
(stdc_load8_leu64): Assign to temporaries rather than ORing to zero.

3 weeks agostdc_rotate_left, stdc_rotate_right: Update documentation.
Bruno Haible [Mon, 16 Mar 2026 12:31:59 +0000 (13:31 +0100)] 
stdc_rotate_left, stdc_rotate_right: Update documentation.

* doc/posix-functions/stdc_rotate_left.texi: Document the effects of the
new module.
* doc/posix-functions/stdc_rotate_right.texi: Likewise.

3 weeks agostdbit-h: Reorder definitions.
Bruno Haible [Mon, 16 Mar 2026 09:12:46 +0000 (10:12 +0100)] 
stdbit-h: Reorder definitions.

* lib/stdbit.in.h: Move private helper macros and functions to the
section conditionalized by @GNULIB_STDC_LEADING_ZEROS@,
@GNULIB_STDC_TRAILING_ZEROS@, @GNULIB_STDC_COUNT_ONES@, respectively.

3 weeks agostdbit-h: Fix syntax error in C++ mode (regression 2026-03-12).
Bruno Haible [Mon, 16 Mar 2026 08:45:45 +0000 (09:45 +0100)] 
stdbit-h: Fix syntax error in C++ mode (regression 2026-03-12).

* lib/stdbit.in.h: Move the 'extern "C" {' outside of the
'#if !@HAVE_STDBIT_H@'.

3 weeks agostdbit-h: remove stdbit.c
Paul Eggert [Mon, 16 Mar 2026 06:54:59 +0000 (23:54 -0700)] 
stdbit-h: remove stdbit.c

lib/stdbit.c was present only to define private helper functions.
Move them into lib/stdc_leading_zeros.c and
lib/stdc_trailing_zeros.c, depending on what they help.
The latter now might use the former, since the
_gl_stdbit_ctz family calls the _gl_stdbit_clz family
when !defined _GL_STDBIT_HAS_BUILTIN_CTZ && !defined _MSC_VER,
so stdc_trailing_zeros now depends on stdc_leading_zeros.
* lib/stdbit.c: Remove file.
* lib/stdbit.in.h (_GL_STDBIT_INLINE): Remove.
All uses replaced by _GL_STDC_LEADING_ZEROS_INLINE
or _GL_STDC_TRAILING_ZEROS_INLINE.
* modules/stdbit-h (Files, lib_SOURCES): Remove lib/stdbit.c.
* modules/stdc_trailing_zeros (Depends-on): Add stdc_leading_zeros.

3 weeks agostdbit-h: test without <stdint.h>
Paul Eggert [Mon, 16 Mar 2026 06:54:58 +0000 (23:54 -0700)] 
stdbit-h: test without <stdint.h>

Improve the <stdbit.h> tests so that they check
that <stdbit.h> works even if <stdint.h> is not included.
* modules/stdc_bit_ceil-tests, modules/stdc_bit_floor-tests:
* modules/stdc_bit_width-tests, modules/stdc_count_ones-tests:
* modules/stdc_count_zeros-tests:
* modules/stdc_first_leading_one-tests:
* modules/stdc_first_leading_zero-tests:
* modules/stdc_first_trailing_one-tests:
* modules/stdc_first_trailing_zero-tests:
* modules/stdc_has_single_bit-tests:
* modules/stdc_leading_ones-tests:
* modules/stdc_leading_zeros-tests:
* modules/stdc_trailing_ones-tests:
* modules/stdc_trailing_zeros-tests:
(Depends-on): Remove stdint-h.
* tests/from-glibc/tst-stdbit.h [GNULIB_TEST_STDBIT]:
Do not include <stdint.h>.

3 weeks agostdbit-h: don’t depend on stdint-h
Paul Eggert [Mon, 16 Mar 2026 06:54:58 +0000 (23:54 -0700)] 
stdbit-h: don’t depend on stdint-h

* modules/stdc_load8, modules/stdc_load8_aligned:
* modules/stdc_store8, modules/stdc_store8_aligned:
* modules/stdc_memreverse8u:
(Depends-on): Remove stdint-h, as Gnulib should be able to assume
the small subset of C99 <stdint.h> that stdbit.in.h uses.

3 weeks agostdbit-h: namespace cleanup on recent GNU
Paul Eggert [Mon, 16 Mar 2026 06:54:58 +0000 (23:54 -0700)] 
stdbit-h: namespace cleanup on recent GNU

* lib/stdbit.in.h: Include <stddef.h> if !@HAVE_STDBIT_H@, good on
all known Gnulib targets, not if @GNULIB_STDC_MEMREVERSE8@, which
is not quite right because C23 requires that stdbit.h define
size_t even if stdc_memreverse8 is not used.
Do not include <stdint.h> if @HAVE_STDBIT_H@ && defined
__UINT_FAST64_TYPE__, as it is no longer needed.
(_GL_STDBIT_UINT_FAST16, _GL_STDBIT_UINT_FAST32)
(_GL_STDBIT_UINT_FAST64): New macros.  Use them instead of
uint_fast16_t etc., to avoid namespace pollution.
(stdc_load8_beu16, stdc_load8_beu32, stdc_load8_beu64)
(stdc_load8_leu16, stdc_load8_leu32, stdc_load8_leu64):
Use them instead of casting to the relevant types,
to avoid the need for casts.

3 weeks agotest-stdc_rotate_right tests: Fix whitespace.
Collin Funk [Mon, 16 Mar 2026 05:29:25 +0000 (22:29 -0700)] 
test-stdc_rotate_right tests: Fix whitespace.

* tests/test-stdc_rotate_right.c (TEST_CASE): Remove extra space
character.

3 weeks agodoc: add missing module indexes.
Collin Funk [Mon, 16 Mar 2026 05:27:18 +0000 (22:27 -0700)] 
doc: add missing module indexes.

Reported by Bruno Haible in
<https://lists.gnu.org/r/bug-gnulib/2026-03/msg00124.html>.

* doc/posix-functions/stdc_rotate_left.texi: Add missing module index.
* doc/posix-functions/stdc_rotate_right.texi: Likewise.

3 weeks agostdc_rotate_right: Add tests.
Collin Funk [Mon, 16 Mar 2026 00:01:40 +0000 (17:01 -0700)] 
stdc_rotate_right: Add tests.

* modules/stdc_rotate_right-tests: New file.
* tests/test-stdc_rotate_right.c: Likewise.

3 weeks agostdc_rotate_right: New module.
Collin Funk [Mon, 16 Mar 2026 00:00:38 +0000 (17:00 -0700)] 
stdc_rotate_right: New module.

* lib/stdbit.in.h (_GL_STDC_ROTATE_RIGHT_INLINE, _gl_stdc_rotate_right)
(stdc_rotate_right): New macros.
(stdc_rotate_right_uc, stdc_rotate_right_us, stdc_rotate_right_ui)
(stdc_rotate_right_ul, stdc_rotate_right_ull): New functions.
* lib/stdc_rotate_right.c: New file.
* m4/stdbit_h.m4 (gl_STDBIT_H_REQUIRE_DEFAULTS): Initialize
GNULIB_STDC_ROTATE_RIGHT.
* modules/stdbit-h (Makefile.am): Substitute GNULIB_STDC_ROTATE_RIGHT.
* modules/stdc_rotate_right: New file.
* doc/posix-functions/stdc_rotate_right.texi: Mention the new module.

3 weeks agostdc_rotate_left: Add tests.
Collin Funk [Sun, 15 Mar 2026 23:53:26 +0000 (16:53 -0700)] 
stdc_rotate_left: Add tests.

* modules/stdc_rotate_left-tests: New file.
* tests/test-stdc_rotate_left.c: Likewise.

3 weeks agostdc_rotate_left: New module.
Collin Funk [Sun, 15 Mar 2026 23:48:45 +0000 (16:48 -0700)] 
stdc_rotate_left: New module.

* lib/stdbit.in.h (_GL_STDC_ROTATE_LEFT_INLINE, _gl_stdc_rotate_left)
(stdc_rotate_left): New macros.
(stdc_rotate_left_uc, stdc_rotate_left_us, stdc_rotate_left_ui)
(stdc_rotate_left_ul, stdc_rotate_left_ull): New functions.
* lib/stdc_rotate_left.c: New file.
* m4/stdbit_h.m4 (gl_STDBIT_H_REQUIRE_DEFAULTS): Initialize
GNULIB_STDC_ROTATE_LEFT.
* modules/stdbit-h (Makefile.am): Substitute GNULIB_STDC_ROTATE_LEFT.
* modules/stdc_rotate_left: New file.
* doc/posix-functions/stdc_rotate_left.texi: Mention the new module.

3 weeks agoposix_spawn-internal: Move private Gnulib functions to _gl_* namespace.
Bruno Haible [Sun, 15 Mar 2026 20:58:34 +0000 (21:58 +0100)] 
posix_spawn-internal: Move private Gnulib functions to _gl_* namespace.

* lib/spawn_int.h (_gl_posix_spawn_file_actions_realloc): Renamed from
gl_posix_spawn_file_actions_realloc.
(_gl_posix_spawn_internal): Renamed from gl_posix_spawn_internal.

3 weeks agolocale-h: Move private Gnulib functions to _gl_* namespace.
Bruno Haible [Sun, 15 Mar 2026 20:55:10 +0000 (21:55 +0100)] 
locale-h: Move private Gnulib functions to _gl_* namespace.

* lib/locale.in.h (_gl_log2_lc_mask): Renamed from gl_log2_lc_mask.
(_gl_log2_lcmask_to_index): Renamed from gl_log2_lcmask_to_index.
(_gl_index_to_log2_lcmask): Renamed from gl_index_to_log2_lcmask.
* lib/duplocale.c: Update.
* lib/freelocale.c: Update.
* lib/newlocale.c: Update.
* lib/getlocalename_l-unsafe.c: Update.
* lib/is_l-impl.h: Update.
* lib/to_l-impl.h: Update.
* lib/strcasecmp_l.c: Update.
* lib/strncasecmp_l.c: Update.
* lib/strerror_l.c: Update.

3 weeks agostrnul: Move private Gnulib functions to _gl_* namespace.
Bruno Haible [Sun, 15 Mar 2026 20:43:30 +0000 (21:43 +0100)] 
strnul: Move private Gnulib functions to _gl_* namespace.

* lib/string.in.h (_gl_strnul): Renamed from gl_strnul.
* lib/strnul.c: Update.

3 weeks agostdlib-h: Move private Gnulib functions to _gl_* namespace.
Bruno Haible [Sun, 15 Mar 2026 20:41:06 +0000 (21:41 +0100)] 
stdlib-h: Move private Gnulib functions to _gl_* namespace.

* lib/stdlib.in.h (_gl_MB_CUR_MAX): Renamed from gl_MB_CUR_MAX.

3 weeks agostdio-h, stdio-windows: Move private Gnulib functions to _gl_* namespace.
Bruno Haible [Sun, 15 Mar 2026 20:38:32 +0000 (21:38 +0100)] 
stdio-h, stdio-windows: Move private Gnulib functions to _gl_* namespace.

* lib/stdio.in.h (_gl_consolesafe_fwrite): Renamed from
gl_consolesafe_fwrite.
(_gl_consolesafe_fprintf): Renamed from gl_consolesafe_fprintf.
(_gl_consolesafe_printf): Renamed from gl_consolesafe_printf.
(_gl_consolesafe_vfprintf): Renamed from gl_consolesafe_vfprintf.
(_gl_consolesafe_vprintf): Renamed from gl_consolesafe_vprintf.
* lib/stdio-consolesafe.c: Update.
* lib/stdio-write.c: Update.

3 weeks agomath-h: Move private Gnulib functions to _gl_* namespace.
Bruno Haible [Sun, 15 Mar 2026 20:33:08 +0000 (21:33 +0100)] 
math-h: Move private Gnulib functions to _gl_* namespace.

* lib/math.in.h (_gl_isfinitef): Renamed from gl_isfinitef.
(_gl_isfinited): Renamed from gl_isfinited.
(_gl_isfinitel): Renamed from gl_isfinitel.
(_gl_isinff): Renamed from gl_isinff.
(_gl_isinfd): Renamed from gl_isinfd.
(_gl_isinfl): Renamed from gl_isinfl.
(_gl_isnanf): Renamed from gl_isnan_f.
(_gl_isnand): Renamed from gl_isnan_d.
(_gl_isnanl): Renamed from gl_isnan_l.
(_gl_signbitf): Renamed from gl_signbitf.
(_gl_signbitf_OPTIMIZED_MACRO): Renamed from
gl_signbitf_OPTIMIZED_MACRO.
(_gl_signbitd): Renamed from gl_signbitd.
(_gl_signbitd_OPTIMIZED_MACRO): Renamed from
gl_signbitd_OPTIMIZED_MACRO.
(_gl_signbitl): Renamed from gl_signbitl.
(_gl_signbitl_OPTIMIZED_MACRO): Renamed from
gl_signbitl_OPTIMIZED_MACRO.
* lib/isfinite.c: Update.
* lib/isinf.c: Update.
* lib/signbitf.c: Update.
* lib/signbitd.c: Update.
* lib/signbitl.c: Update.

3 weeks agofloat-h: Move private Gnulib data to _gl_* namespace.
Bruno Haible [Sun, 15 Mar 2026 18:42:36 +0000 (19:42 +0100)] 
float-h: Move private Gnulib data to _gl_* namespace.

* lib/float.in.h (_gl_LDBL_MAX): Renamed from gl_LDBL_MAX.
(_gl_LDBL_TRUE_MIN): Renamed from gl_LDBL_TRUE_MIN.
(_gl_FLT_SNAN): Renamed from gl_FLT_SNAN.
(_gl_DBL_SNAN): Renamed from gl_DBL_SNAN.
(_gl_LDBL_SNAN): Renamed from gl_LDBL_SNAN.
* lib/float.c: Update.

3 weeks agoexpl, exp2l: Move private Gnulib data to _gl_* namespace.
Bruno Haible [Sun, 15 Mar 2026 18:36:31 +0000 (19:36 +0100)] 
expl, exp2l: Move private Gnulib data to _gl_* namespace.

* lib/expl-table.c (_gl_expl_table): Renamed from gl_expl_table.
* lib/expl.c: Update.
* lib/exp2l.c: Update.

3 weeks agomsvc-inval: Move private Gnulib functions to _gl_* namespace.
Bruno Haible [Sun, 15 Mar 2026 18:32:44 +0000 (19:32 +0100)] 
msvc-inval: Move private Gnulib functions to _gl_* namespace.

* lib/msvc-inval.h (_gl_msvc_inval_current): Renamed from
gl_msvc_inval_current.
* lib/msvc-inval.c: Update.

3 weeks agoglibc-internal/scratch_buffer: Move private Gnulib functions to _gl_* namespace.
Bruno Haible [Sun, 15 Mar 2026 17:50:24 +0000 (18:50 +0100)] 
glibc-internal/scratch_buffer: Move private Gnulib functions to _gl_* namespace.

* lib/scratch_buffer.h (__libc_scratch_buffer_*): Define to symbols in
the _gl_* namespace.

3 weeks agoglibc-internal/dynarray: Move private Gnulib functions to _gl_* namespace.
Bruno Haible [Sun, 15 Mar 2026 17:45:07 +0000 (18:45 +0100)] 
glibc-internal/dynarray: Move private Gnulib functions to _gl_* namespace.

* lib/dynarray.h (__libc_dynarray_*): Define to symbols in the _gl_*
namespace.

3 weeks agoat-init: Move private Gnulib functions to _gl_* namespace.
Bruno Haible [Sun, 15 Mar 2026 17:38:48 +0000 (18:38 +0100)] 
at-init: Move private Gnulib functions to _gl_* namespace.

* lib/at-init.h (_gl_at_init_dummy): Renamed from gl_at_init_dummy.
* lib/at-init.c: Update.

3 weeks agostdc_memreverse8: Add tests.
Bruno Haible [Sun, 15 Mar 2026 13:48:43 +0000 (14:48 +0100)] 
stdc_memreverse8: Add tests.

* tests/test-stdc_memreverse8.c: New file.
* modules/stdc_memreverse8-tests: New file.

3 weeks agostdc_memreverse8: New module.
Bruno Haible [Sun, 15 Mar 2026 13:35:48 +0000 (14:35 +0100)] 
stdc_memreverse8: New module.

* lib/stdbit.in.h: Include <stddef.h>.
(_GL_STDC_MEMREVERSE8_INLINE): New macro.
(stdc_memreverse8): New function.
* lib/stdc_memreverse8.c: New file.
* m4/stdbit_h.m4 (gl_STDBIT_H_REQUIRE_DEFAULTS): Initialize
GNULIB_STDC_MEMREVERSE8.
* modules/stdbit-h (Makefile.am): Substitute GNULIB_STDC_MEMREVERSE8.
* modules/stdc_memreverse8: New file.
* doc/posix-functions/stdc_memreverse8.texi: Mention the new module.

3 weeks agobyteswap: Rely on <stdbit.h>.
Bruno Haible [Sun, 15 Mar 2026 12:30:37 +0000 (13:30 +0100)] 
byteswap: Rely on <stdbit.h>.

* lib/byteswap.in.h: Include <stdbit.h>.
(_GL_BYTESWAP_HAS_BUILTIN_BSWAP16, _GL_BYTESWAP_HAS_BUILTIN_BSWAP32,
_GL_BYTESWAP_HAS_BUILTIN_BSWAP64): Remove macros.
(bswap_16): Just call stdc_memreverse8u16.
(bswap_32): Just call stdc_memreverse8u32.
(bswap_64): Just call stdc_memreverse8u64.
* modules/byteswap (Depends-on): Add stdc_memreverse8u. Remove bool.

3 weeks agostdc_load8_aligned, stdc_store8_aligned: Don't use <byteswap.h>.
Bruno Haible [Sun, 15 Mar 2026 12:24:24 +0000 (13:24 +0100)] 
stdc_load8_aligned, stdc_store8_aligned: Don't use <byteswap.h>.

* lib/stdbit.in.h: Don't include <byteswap.h>.
(_GL_STDBIT_BSWAP16, _GL_STDBIT_BSWAP32, _GL_STDBIT_BSWAP64): Remove
macros.
(stdc_memreverse8u8, stdc_memreverse8u16, stdc_memreverse8u32,
stdc_memreverse8u64): Generalize: Take uint_least* parameter.
(stdc_load8_aligned_*, stdc_store8_aligned_*): Use stdc_memreverse8u16,
stdc_memreverse8u32, stdc_memreverse8u64 instead of _GL_STDBIT_BSWAP16,
_GL_STDBIT_BSWAP32, _GL_STDBIT_BSWAP64.

3 weeks agostdc_memreverse8u: Add tests.
Bruno Haible [Sun, 15 Mar 2026 12:05:20 +0000 (13:05 +0100)] 
stdc_memreverse8u: Add tests.

* tests/test-stdc_memreverse8u.c: New file, based on
tests/test-byteswap.c.
* modules/stdc_memreverse8u-tests: New file.

3 weeks agostdc_memreverse8u: New module.
Bruno Haible [Sun, 15 Mar 2026 12:01:49 +0000 (13:01 +0100)] 
stdc_memreverse8u: New module.

* lib/stdbit.in.h (_GL_STDC_MEMREVERSE8U_INLINE): New macro.
(stdc_memreverse8u8, stdc_memreverse8u16, stdc_memreverse8u32,
stdc_memreverse8u64): New functions, based on lib/byteswap.in.h.
* lib/stdc_memreverse8u.c: New file.
* m4/stdbit_h.m4 (gl_STDBIT_H_REQUIRE_DEFAULTS): Initialize
GNULIB_STDC_MEMREVERSE8U.
* modules/stdbit-h (Makefile.am): Substitute GNULIB_STDC_MEMREVERSE8U.
* modules/stdc_memreverse8u: New file.
* doc/posix-functions/stdc_memreverse8u8.texi: Mention the new module.
* doc/posix-functions/stdc_memreverse8u16.texi: Likewise.
* doc/posix-functions/stdc_memreverse8u32.texi: Likewise.
* doc/posix-functions/stdc_memreverse8u64.texi: Likewise.

3 weeks agohamt: Don't use deprecated module.
Bruno Haible [Sun, 15 Mar 2026 09:13:52 +0000 (10:13 +0100)] 
hamt: Don't use deprecated module.

* lib/hamt.c: Include <stdbit.h> instead of count-one-bits.h.
(trienode_count, subtrie_lookup, subtrie_insert, subtrie_remove): Call
stdc_count_ones instead of count_one_bits.
* modules/hamt (Depends-on): Add stdc_count_ones. Remove count-one-bits.

3 weeks agocount-*: Fix module status (regression yesterday).
Bruno Haible [Sun, 15 Mar 2026 09:01:57 +0000 (10:01 +0100)] 
count-*: Fix module status (regression yesterday).

* modules/count-leading-zeros: Mark as deprecated, not obsolete.
Recommend module 'stdc_leading_zeros' instead of 'stdbit'.
* modules/count-trailing-zeros: Mark as deprecated, not obsolete.
Recommend module 'stdc_trailing_zeros' instead of 'stdbit'.
* modules/count-one-bits: Mark as deprecated, not obsolete. Recommend
module 'stdc_count_ones' instead of 'stdbit'.
* NEWS: Update.

3 weeks agostdbit: obsolete older count-* modules
Paul Eggert [Sun, 15 Mar 2026 01:54:36 +0000 (18:54 -0700)] 
stdbit: obsolete older count-* modules

* modules/count-leading-zeros:
* modules/count-one-bits:
* modules/count-trailing-zeros: Now obsolete,
as the stdbit module is now mature enough.

3 weeks agostdbit-h: avoid <byteswap.h> namespace pollution
Paul Eggert [Sat, 14 Mar 2026 22:15:50 +0000 (15:15 -0700)] 
stdbit-h: avoid <byteswap.h> namespace pollution

* lib/stdbit.in.h (_GL_STDBIT_HAS_BUILTIN_BSWAP16)
(_GL_STDBIT_HAS_BUILTIN_BSWAP32, _GL_STDBIT_HAS_BUILTIN_BSWAP64)
(_GL_STDBIT_BSWAP16, _GL_STDBIT_BSWAP32, _GL_STDBIT_BSWAP64):
New macros.  All uses of bswap_16, bswap_32, bswap_64 changed.

3 weeks agostdbit-h: avoid <string.h> namespace pollution
Paul Eggert [Sat, 14 Mar 2026 21:27:18 +0000 (14:27 -0700)] 
stdbit-h: avoid <string.h> namespace pollution

* lib/stdbit.in.h (_GL_STDBIT_MEMCPY): New macro.
All uses of memcpy changed.

3 weeks agostdbit-h: __has_builtin (__builtin_assume_aligned)
Paul Eggert [Sat, 14 Mar 2026 20:07:54 +0000 (13:07 -0700)] 
stdbit-h: __has_builtin (__builtin_assume_aligned)

Prefer the usual pattern for checking for builtins:
allow __has_builtin for compilers that are not Clang or GCC
where we already have something.
* lib/stdbit.in.h (_GL_HAS_BUILTIN_ASSUME_ALIGNED): New macro.
(_GL_STDBIT_ASSUME_ALIGNED): Use it.

3 weeks agodoc: assume copy to int preserves low order bits
Paul Eggert [Sat, 14 Mar 2026 19:23:13 +0000 (12:23 -0700)] 
doc: assume copy to int preserves low order bits

3 weeks agodoc: fix typos re Unisys ClearPath Libra
Paul Eggert [Sat, 14 Mar 2026 19:21:55 +0000 (12:21 -0700)] 
doc: fix typos re Unisys ClearPath Libra

3 weeks agostdbit-h: adjust comments to match code
Paul Eggert [Sat, 14 Mar 2026 18:30:35 +0000 (11:30 -0700)] 
stdbit-h: adjust comments to match code

* lib/stdbit.in.h: Adjust commentary to match code’s types
and use of if rather than #if.

3 weeks agostdbit-h: restore optimization for RISC-V etc
Paul Eggert [Sat, 14 Mar 2026 00:44:06 +0000 (17:44 -0700)] 
stdbit-h: restore optimization for RISC-V etc

Problem reported by Bruno Haible in:
https://lists.gnu.org/r/bug-gnulib/2026-03/msg00098.html
This patch does the optimization in a different way,
preferring plain ‘if’ to ‘#if’ if either will do.
* lib/stdbit.in.h: Bring back includes for byteswap.h, string.h.
(_GL_STDBIT_OPTIMIZE_VIA_MEMCPY, _GL_STDBIT_ASSUME_ALIGNED)
(_GL_STDBIT_BIGENDIAN): New macros.
(stdc_load8_beu16, stdc_load8_leu16):
Bring back casts to uint_fast16_t.
(stdc_load8_aligned_beu16, stdc_load8_aligned_beu32)
(stdc_load8_aligned_beu64, stdc_load8_aligned_leu16)
(stdc_load8_aligned_leu32, stdc_load8_aligned_leu64)
(stdc_load8_aligned_bes8, stdc_load8_aligned_bes16)
(stdc_load8_aligned_bes32, stdc_load8_aligned_bes64)
(stdc_load8_aligned_les8, stdc_load8_aligned_les16)
(stdc_load8_aligned_les32, stdc_load8_aligned_les64)
(stdc_store8_aligned_beu16, stdc_store8_aligned_beu32)
(stdc_store8_aligned_beu64, stdc_store8_aligned_leu16)
(stdc_store8_aligned_leu32, stdc_store8_aligned_leu64)
(stdc_store8_aligned_bes8, stdc_store8_aligned_bes16)
(stdc_store8_aligned_bes32, stdc_store8_aligned_bes64)
(stdc_store8_aligned_les8, stdc_store8_aligned_les16)
(stdc_store8_aligned_les32, stdc_store8_aligned_les64):
Bring back the memcpy optimization if _GL_STDBIT_OPTIMIZE_VIA_MEMCPY.
* modules/stdc_load8_aligned (Depends-on):
* modules/stdc_store8_aligned (Depends-on):
Go back to depending on byteswap.

3 weeks agostdbit-h: fewer casts
Paul Eggert [Fri, 13 Mar 2026 19:29:50 +0000 (12:29 -0700)] 
stdbit-h: fewer casts

* lib/stdbit.in.h (stdc_load8_beu16, stdc_load8_leu16)
(stdc_store8_beu16, stdc_store8_beu32, stdc_store8_beu64)
(stdc_store8_leu16, stdc_store8_leu32, stdc_store8_leu64):
Avoid unnecessary and sometimes-confusing casts.

3 weeks agostdbit-h: simplify stdc_{load,store)_[bl]e[s]*
Paul Eggert [Fri, 13 Mar 2026 19:25:11 +0000 (12:25 -0700)] 
stdbit-h: simplify stdc_{load,store)_[bl]e[s]*

* lib/stdbit.in.h (stdc_load8_bes8, stdc_load8_bes16)
(stdc_load8_bes32, stdc_load8_bes64, stdc_load8_les8)
(stdc_load8_les16, stdc_load8_les32, stdc_load8_les64)
(stdc_store8_bes8, stdc_store8_bes16, stdc_store8_bes32)
(stdc_store8_bes64, stdc_store8_les8, stdc_store8_les16)
(stdc_store8_les32, stdc_store8_les64):
Simplify by deferring to the unsigned counterpart.

3 weeks agostdbit-h: simpler fix for -fno-strict-aliasing
Paul Eggert [Fri, 13 Mar 2026 18:53:13 +0000 (11:53 -0700)] 
stdbit-h: simpler fix for -fno-strict-aliasing

* lib/stdbit.in.h: Do not include byteswap.h.
(_GL_LOADSTORE8_VARIANT_A, _GL_LOADSTORE8_VARIANT_E)
(_GL_LOADSTORE8_VARIANT_F): Remove.
(stdc_load8_aligned_beu8, stdc_load8_aligned_beu16)
(stdc_load8_aligned_beu32, stdc_load8_aligned_beu64)
(stdc_load8_aligned_leu8, stdc_load8_aligned_leu16)
(stdc_load8_aligned_leu32, stdc_load8_aligned_leu64)
(stdc_load8_aligned_bes8, stdc_load8_aligned_bes16)
(stdc_load8_aligned_bes32, stdc_load8_aligned_bes64)
(stdc_load8_aligned_les8, stdc_load8_aligned_les16)
(stdc_load8_aligned_les32, stdc_load8_aligned_les64)
(stdc_store8_aligned_beu8, stdc_store8_aligned_beu16)
(stdc_store8_aligned_beu32, stdc_store8_aligned_beu64)
(stdc_store8_aligned_leu8, stdc_store8_aligned_leu16)
(stdc_store8_aligned_leu32, stdc_store8_aligned_leu64)
(stdc_store8_aligned_bes8, stdc_store8_aligned_bes16)
(stdc_store8_aligned_bes32, stdc_store8_aligned_bes64)
(stdc_store8_aligned_les8, stdc_store8_aligned_les16)
(stdc_store8_aligned_les32, stdc_store8_aligned_les64):
Simplifly by deferring to their unaligned counterparts.
* modules/stdc_load8_aligned (Depends-on):
Depend on stdc_load8, not byteswap.
* modules/stdc_store8_aligned (Depends-on):
Depend on stdc_store8, not byteswap.

3 weeks agostdbit-h: add test for recent aligned issue.
Paul Eggert [Fri, 13 Mar 2026 18:43:49 +0000 (11:43 -0700)] 
stdbit-h: add test for recent aligned issue.

Adapted from test by Lasse Collin <lasse.collin@tukaani.org> in
<https://lists.gnu.org/archive/html/bug-gnulib/2026-03/msg00094.html>.
* modules/stdc_store8_aligned-tests (Depends-on):
Depend on stdc_load8_aligned.
* tests/test-stdc_store8_aligned.c (test_strict_aliasing): New test.
(main): Use it.

3 weeks agostdc_load8_aligned, stdc_store8_aligned: Fix strict aliasing violations.
Bruno Haible [Fri, 13 Mar 2026 17:53:39 +0000 (18:53 +0100)] 
stdc_load8_aligned, stdc_store8_aligned: Fix strict aliasing violations.

Reported by Lasse Collin <lasse.collin@tukaani.org> in
<https://lists.gnu.org/archive/html/bug-gnulib/2026-03/msg00094.html>.

* lib/stdbit.in.h: Include <string.h>.
(_GL_LOADSTORE8_VARIANT_A, _GL_LOADSTORE8_VARIANT_E,
_GL_LOADSTORE8_VARIANT_F): New macros.
(stdc_load8_aligned_beu16, stdc_load8_aligned_beu32,
stdc_load8_aligned_beu64, stdc_load8_aligned_leu16,
stdc_load8_aligned_leu32, stdc_load8_aligned_leu64,
stdc_load8_aligned_bes8, stdc_load8_aligned_bes16,
stdc_load8_aligned_bes32, stdc_load8_aligned_bes64,
stdc_load8_aligned_les8, stdc_load8_aligned_les16,
stdc_load8_aligned_les32, stdc_load8_aligned_les64,
stdc_load8_bes8, stdc_load8_les8, stdc_store8_aligned_beu16,
stdc_store8_aligned_beu32, stdc_store8_aligned_beu64,
stdc_store8_aligned_leu16, stdc_store8_aligned_leu32,
stdc_store8_aligned_leu64, stdc_store8_aligned_bes8,
stdc_store8_aligned_bes16, stdc_store8_aligned_bes32,
stdc_store8_aligned_bes64, stdc_store8_aligned_les8,
stdc_store8_aligned_les16, stdc_store8_aligned_les32,
stdc_store8_aligned_les64): Don't cast a pointer to a pointer to a
different element type.

4 weeks agostdc_store8: Add tests.
Bruno Haible [Fri, 13 Mar 2026 08:07:17 +0000 (09:07 +0100)] 
stdc_store8: Add tests.

* tests/test-stdc_store8.c: New file, based on
tests/test-stdc_store8_aligned.c.
* modules/stdc_store8-tests: New file.

4 weeks agostdc_store8: New module.
Bruno Haible [Fri, 13 Mar 2026 07:48:11 +0000 (08:48 +0100)] 
stdc_store8: New module.

* lib/stdbit.in.h (_GL_STDC_STORE8_INLINE): New macro.
(stdc_store8_beu{8,16,32,64}, stdc_store8_leu{8,16,32,64},
stdc_store8_bes{8,16,32,64}, stdc_store8_les{8,16,32,64}): New
functions.
* lib/stdc_store8.c: New file.
* m4/stdbit_h.m4 (gl_STDBIT_H_REQUIRE_DEFAULTS): Initialize
GNULIB_STDC_STORE8.
* modules/stdbit-h (Makefile.am): Substitute GNULIB_STDC_STORE8.
* modules/stdc_store8: New file.
* doc/posix-functions/stdc_store8_beu8.texi: Mention the new module.
* doc/posix-functions/stdc_store8_beu16.texi: Likewise.
* doc/posix-functions/stdc_store8_beu32.texi: Likewise.
* doc/posix-functions/stdc_store8_beu64.texi: Likewise.
* doc/posix-functions/stdc_store8_leu8.texi: Likewise.
* doc/posix-functions/stdc_store8_leu16.texi: Likewise.
* doc/posix-functions/stdc_store8_leu32.texi: Likewise.
* doc/posix-functions/stdc_store8_leu64.texi: Likewise.
* doc/posix-functions/stdc_store8_bes8.texi: Likewise.
* doc/posix-functions/stdc_store8_bes16.texi: Likewise.
* doc/posix-functions/stdc_store8_bes32.texi: Likewise.
* doc/posix-functions/stdc_store8_bes64.texi: Likewise.
* doc/posix-functions/stdc_store8_les8.texi: Likewise.
* doc/posix-functions/stdc_store8_les16.texi: Likewise.
* doc/posix-functions/stdc_store8_les32.texi: Likewise.
* doc/posix-functions/stdc_store8_les64.texi: Likewise.

4 weeks agostdc_store8_aligned: Add tests.
Bruno Haible [Fri, 13 Mar 2026 07:13:57 +0000 (08:13 +0100)] 
stdc_store8_aligned: Add tests.

* tests/test-stdc_store8_aligned.c: New file.
* modules/stdc_store8_aligned-tests: New file.