]> git.ipfire.org Git - thirdparty/gnulib.git/log
thirdparty/gnulib.git
7 weeks agolocalename-unsafe: Improve Windows LCID lookup cache.
Bruno Haible [Wed, 10 Dec 2025 21:23:45 +0000 (22:23 +0100)] 
localename-unsafe: Improve Windows LCID lookup cache.

Reported by Bryan Green <dbryan.green@gmail.com> in
<https://savannah.gnu.org/bugs/?67781>.

* lib/localename-unsafe.c (get_lcid): Cache also the failed LCID
lookups.

7 weeks agolocalename-unsafe: Improve Windows LCID lookup cache.
Bruno Haible [Wed, 10 Dec 2025 21:22:39 +0000 (22:22 +0100)] 
localename-unsafe: Improve Windows LCID lookup cache.

* lib/localename-unsafe.c (get_lcid): Don't overrun the last_locale array.

7 weeks agocanonicalize-lgpl: Fix UMR introduced in recent change.
Bruno Haible [Wed, 10 Dec 2025 18:06:32 +0000 (19:06 +0100)] 
canonicalize-lgpl: Fix UMR introduced in recent change.

* lib/canonicalize-lgpl.c (realpath_stk): Move declaration of 'failed'
before first 'goto'.

7 weeks agocanonicalize: Reduce scope of local variables.
Bruno Haible [Wed, 10 Dec 2025 18:06:14 +0000 (19:06 +0100)] 
canonicalize: Reduce scope of local variables.

* lib/canonicalize.c (canonicalize_filename_mode_stk): Reduce scope of
'logical', 'num_links', 'end_in_extra_buffer'.

7 weeks agocanonicalize: fix UMR introduced in recent change
Pádraig Brady [Wed, 10 Dec 2025 17:20:19 +0000 (17:20 +0000)] 
canonicalize: fix UMR introduced in recent change

This caused coreutils tests/readlink/can-e.sh to fail
as that tests reading the current dir after it's removed.

* lib/canonicalize.c (canonicalize_filename_mode_stk): Move variable
initialization before goto which may skip them.

7 weeks agohuman: fix UMR introduced in recent change
Pádraig Brady [Wed, 10 Dec 2025 16:52:53 +0000 (16:52 +0000)] 
human: fix UMR introduced in recent change

GCC 15 identifies this with:

lib/human.c: In function 'human_readable':
lib/human.c:295:32: warning: 'exponent_max' may be used uninitialized
  295 |             while (base <= amt && exponent < exponent_max);
      |                    ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~

This issue also caused coreutils tests/dd/dd-stats.sh to fail

* lib/human.c (human_readable): Move initialization before
the gotos which might skip it.

7 weeks agosigsegv: Reduce scope of local variables.
Bruno Haible [Wed, 10 Dec 2025 09:21:50 +0000 (10:21 +0100)] 
sigsegv: Reduce scope of local variables.

* lib/stackvma.c (vma_iterate): M.

7 weeks agolib: Reduce scope of local variables.
Bruno Haible [Tue, 9 Dec 2025 23:23:48 +0000 (00:23 +0100)] 
lib: Reduce scope of local variables.

M = Move variable declaration to its initialization.
R = Reduce scope.
S = Split scope, create separate variables from one variable.
B = Insert braces, creating a block scope.
O = Change order of initializations.

* lib/accept4.c (accept4): M.
* lib/acl-internal.c (acl_ace_nontrivial): R.
* lib/acosl.c (acosl): MS.
* lib/af_alg.c (afalg_stream): B.
* lib/alignalloc.h (alignalloc): R.
* lib/alloca.c (find_stack_direction): M.
(alloca): M.
* lib/amemxfrm.c (amemxfrm): MR.
* lib/arcfour.c (arcfour_stream): MB.
(arcfour_setkey): MB.
* lib/arctwo.c (arctwo_encrypt): M.
(arctwo_decrypt): M.
(arctwo_setkey_ekb): M.
* lib/areadlink-with-size.c (areadlink_with_size): MR.
* lib/areadlinkat-with-size.c (areadlinkat_with_size): MR.
* lib/argmatch.c (argmatch): MO.
(main): RBO.
* lib/argp-fmtstream.c (__argp_make_fmtstream): M.
(__argp_fmtstream_update): M.
(__argp_fmtstream_ensure): R.
(__argp_fmtstream_printf): R.
* lib/argp-fmtstream.h (__argp_fmtstream_set_lmargin): M.
(__argp_fmtstream_set_rmargin): M.
(__argp_fmtstream_set_wmargin): M.
* lib/argp-help.c (validate_uparams): M.
(fill_in_uparams): MR.
(make_hol): MRSO.
(hol_entry_short_iterate): R.
(hol_entry_long_iterate): R.
(hol_entry_first_long): Rename 'num' to 'nopts'.
(canon_doc_option): M.
(hol_append): MR.
(argp_hol): O.
(hol_entry_help): RSBO.
(hol_help): RB.
(usage_argful_short_opt): R.
(usage_long_opt): R.
(hol_usage): SB.
(argp_args_levels): R.
(argp_args_usage): MRB.
(argp_doc): RBO.
(_help): MR.
(__argp_error): R.
* lib/argp-parse.c (group_parse): M.
(parser_init): MRB.
(parser_finalize): MS.
(parser_parse_next): R.
(__argp_parse): MR.
(__argp_input): M.
* lib/argz.c (argz_add_sep): M.
(argz_create_sep): M.
(argz_create): R.
(argz_replace): RB.
* lib/asinl.c (asinl): MRS.
* lib/asnprintf.c (asnprintf): M.
* lib/asnwprintf.c (asnwprintf): M.
* lib/asprintf.c (asprintf): M.
* lib/astrxfrm.c (astrxfrm): MR.
* lib/aszprintf.c (aszprintf): M.
* lib/at-func.c (AT_FUNC_NAME): MR.
* lib/at-func2.c (at_func2): MRS.
* lib/atanl.c (atanl): MRS.
* lib/backupfile.c (numbered_backup): R.
* lib/base32.c (decode_8): R.
(base32_decode_ctx): R.
* lib/base64.c (decode_4): R.
(base64_decode_ctx): R.
* lib/basename-lgpl.c (last_component): R.
(base_len): RO.
* lib/bitset.c (bitset_copy_): R.
* lib/bitset/list.c (lbitset_prune): MR.
(lbitset_weed): MR.
(lbitset_list): SB.
* lib/bitset/table.c (tbitset_list): SB.
* lib/boot-time-aux.h (get_windows_boot_time_fallback): R.
* lib/btoc32.c (btoc32): R.
* lib/c-asprintf.c (c_asprintf): M.
* lib/c-aszprintf.c (c_aszprintf): M.
* lib/c-snprintf.c (c_snprintf): M.
* lib/c-snzprintf.c (c_snzprintf): M.
* lib/c-strcasecmp.c (c_strcasecmp): R.
* lib/c-strcasestr.c (c_strcasestr): MRSB.
* lib/c-strncasecmp.c (c_strncasecmp): R.
* lib/c-strtod.c (C_STRTOD): R.
* lib/c-vsnzprintf.c (c_vsnzprintf): M.
* lib/c-xasprintf.c (c_xasprintf): M.
* lib/c32tob.c (c32tob): R.
* lib/canon-host.c (canon_host_r): MR.
* lib/canonicalize.c (canonicalize_filename_mode_stk): R.
* lib/canonicalize-lgpl.c (realpath_stk): R.
* lib/cbrt.c (cbrt): M.
* lib/cbrtf.c (cbrtf): M.
* lib/cbrtl.c (cbrtl): MR.
* lib/chdir-long.c (chdir_long): M.
(main): MR.
* lib/classpath.c (new_classpath): MB.
* lib/clean-temp.c (create_temp_dir): M.
(unregister_temp_file): M.
(unregister_temp_subdir): M.
(cleanup_temp_file): M.
(cleanup_temp_subdir): M.
(cleanup_temp_dir_contents): MSB.
(open_temp): R.
(fopen_temp): R.
(close_temp): RB.
(fclose_variant_temp): RB.
* lib/clean-temp-simple.c (cleanup_action): MSB.
(cleanup_temporary_file): M.
* lib/copy-file.c (copy_file_internal): MRB.
* lib/cosl.c (cosl): MR.
* lib/crc-generate-table.c (make_crc_table): M.
* lib/crc-x86_64-pclmul.c (crc32_update_no_xor_pclmul): MRSB.
* lib/crc.c (crc32_update_no_xor_slice_by_8): S.
(crc32_update_no_xor_slice_by_n): M.
(crc32_update_no_xor): MR.
* lib/csharpcomp.c (compile_csharp_using_mono): MRB.
(compile_csharp_using_dotnet): MRSB.
(compile_csharp_using_sscli): MRB.
* lib/csharpexec.c (execute_csharp_using_mono): MO.
(execute_csharp_using_dotnet): MO.
(execute_csharp_using_sscli): MO.
(execute_csharp_program): R.
* lib/cygpath.c (execute_and_read_line): M.
* lib/des.c (gl_des_is_weak_key): M.
(gl_3des_ecb_crypt): MO.
* lib/dfa.c (closure): B.
(dfamust): MRB.
* lib/di-set.c (map_device): M.
(di_set_insert): M.
(di_set_lookup): M.
* lib/dirname-lgpl.c (dir_len): R.
* lib/dprintf.c (dprintf): M.
* lib/dup.c (dup_nothrow): R.
* lib/dup2.c (ms_windows_dup2): M.
(klibc_dup2dirfd): M.
(klibc_dup2): MR.
(rpl_dup2): M.
* lib/dup3.c (dup3): M.
* lib/duplocale.c (duplocale): MRSB.
* lib/dzprintf.c (dzprintf): M.
* lib/euidaccess.c (euidaccess): MR.
(main): M.
* lib/exclude.c (add_exclude): R.
* lib/execl.c (execl): SB.
* lib/execle.c (execle): SB.
* lib/execlp.c (execlp): SB.
* lib/execute.c (execute): R.
* lib/fchdir.c (ensure_dirs_slot): M.
(get_name): M.
(_gl_register_fd): R.
* lib/fclose.c (rpl_fclose): MR.
* lib/fcntl.c (dupfd): RO.
(fcntl): R.
(klibc_dupdirfd): M.
(klibc_fcntl): MRSB.
* lib/fdopen.c (rpl_fdopen): M.
* lib/file-has-acl.c (get_aclinfo): R.
(fdfile_has_aclinfo): MR.
* lib/file-remote.c (main): M.
* lib/file-set.c (record_file): M.
(seen_file): R.
* lib/findprog.c (find_in_path): MR.
* lib/findprog-in.c (find_in_given_path): MR.
* lib/flock.c (do_lock): MR.
(do_unlock): M.
(flock): MR.
* lib/fma.c (decode): M.
* lib/fopen.c (rpl_fopen): MR.
* lib/forkpty.c (forkpty): M.
* lib/fprintf.c (fprintf): M.
* lib/freadseek.c (freadseek): MR.
* lib/freopen.c (rpl_freopen): M.
* lib/freopen-safer.c (freopen_safer): M.
* lib/frexp.c (FUNC): MR.
* lib/fseterr.c (fseterr): M.
* lib/fstatat.c (rpl_fstatat): M.
* lib/fstrcmp.c (fstrcmp_free_resources): M.
(fstrcmp_bounded): MR.
* lib/fsusage.c (statvfs_works): R.
* lib/fsync.c (fsync): M.
* lib/ftello.c (ftello): M.
* lib/ftruncate.c (SetFileSize): M.
* lib/fts.c (fts_open): MR.
(fts_load): M.
(fts_close): MR.
(filesystem_type): MRO.
(fts_read): MB.
(fts_children): M.
(fts_build): MR.
(fts_cross_check): RO.
(fd_ring_print): RO.
(fts_stat): RO.
(fts_sort): R.
(fts_alloc): M.
(fts_lfree): R.
(fts_palloc): M.
(fts_padjust): MS.
(fts_maxarglen): M.
(fts_safe_changedir): MR.
* lib/fts-cycle.c (enter_dir): MRO.
(leave_dir): M.
* lib/fzprintf.c (fzprintf): M.
* lib/gc-gnulib.c (gc_cipher_open): MR.
(gc_cipher_setkey): MSB.
(gc_cipher_setiv): M.
(gc_cipher_encrypt_inline): M.
(gc_cipher_decrypt_inline): M.
(gc_hash_open): MR.
(gc_hash_clone): M.
* lib/gc-libgcrypt.c (gc_init): Remove local variable 'err'.
(gc_cipher_open): MR.
(gc_cipher_setkey): M.
(gc_cipher_setiv): M.
(gc_hash_open): MR.
(gc_hash_clone): M.
(gc_md4): MR.
(gc_md5): MR.
(gc_sha1): MR.
(gc_sha256): MR.
(gc_sha512): MR.
(gc_sm3): MR.
(gc_hmac_md5): MR. Remove local variable 'err'.
(gc_hmac_sha1): MR. Remove local variable 'err'.
(gc_hmac_sha256): MR. Remove local variable 'err'.
(gc_hmac_sha512): MR. Remove local variable 'err'.
* lib/gc-pbkdf2.c (gc_pbkdf2_prf): MR.
* lib/gen-uni-tables.c (fill_attributes): M.
(debug_output_predicate): M.
(output_predicate_test): M.
(output_predicate): MR.
(output_category): MR.
(output_combclass): MR.
(output_bidi_category): MR.
(output_decimal_digit_test): M.
(output_decimal_digit): MR.
(output_digit_test): M.
(output_digit): MR.
(output_numeric_test): M.
(output_numeric): MR.
(fill_mirror): MR.
(get_mirror_value): M.
(output_mirror): MR.
(fill_properties): MR.
(fill_property30): MR.
(output_indic_conjunct_break_test): M.
(output_indic_conjunct_break): MR.
(fill_arabicshaping): MR.
(output_joining_type_test): M.
(output_joining_type): MR.
(output_joining_group_test): M.
(output_joining_group): MR.
(fill_scripts): MR.
(output_scripts): MR.
(output_scripts_byname): M.
(fill_blocks): MR.
(output_blocks): M.
(output_ident_category): MR.
(output_charclass): MR.
(output_charmap): MR.
(output_tables): M.
(fill_width): MR.
(output_nonspacing_property): MR.
(output_width_property_test): M.
(debug_output_lbrk_tables): M.
(fill_org_lbp): MR.
(debug_output_org_lbrk_tables): M.
(output_lbpea): M.
(output_lbrk_tables): R.
(output_lbrk_rules_as_tables): M.
(debug_output_wbrk_tables): M.
(fill_org_wbp): MR.
(debug_output_org_wbrk_tables): M.
(output_wbp): M.
(output_wbrk_tables): M.
(output_gbp_test): MR.
(output_gbp_table): MR.
(fill_org_gbp): MR.
(get_decomposition): MR.
(output_decomposition): M.
(output_decomposition_tables): R.
(fill_composition_exclusions): MR.
(debug_output_composition_tables): M.
(output_composition_tables): MSB.
(output_simple_mapping_test): M.
(output_simple_mapping): MR.
(fill_casing_rules): MR.
(fill_casefolding_rules): MR.
(output_casing_rules): M.
(output_version): MR.
* lib/get-rusage-as.c (get_rusage_as_via_setrlimit): R.
(get_rusage_as): M.
* lib/get-rusage-data.c (get_rusage_data_via_setrlimit): R.
(get_rusage_data): M.
* lib/get_ppid_of.c (get_ppid_of): M.
* lib/get_progname_of.c (get_progname_of): MR.
* lib/getaddrinfo.c (use_win32_p): M.
(getaddrinfo): MR.
(freeaddrinfo): M.
* lib/getcwd.c (__getcwd_generic): MRSBO.
* lib/getcwd-lgpl.c (rpl_getcwd): MS.
* lib/getdelim.c (getdelim): MR.
* lib/getdomainname.c (getdomainname): M.
* lib/getentropy.c (getentropy): R.
* lib/getgroups.c (rpl_getgroups): MR.
* lib/gethostname.c (rpl_gethostname): M.
* lib/getloadavg.c (getloadavg): MRB.
* lib/getlocalename_l-unsafe.c (newlocale): MR.
(duplocale): MR.
(freelocale): M.
* lib/getlogin_r.c (getlogin_r): M.
* lib/getndelim2.c (getndelim2): MR.
* lib/getopt.c (exchange): MS.
(process_long_option): MRB.
(_getopt_internal_r): MR.
(_getopt_internal): M.
(main): M.
* lib/getopt1.c (main): M.
* lib/getpass.c (getpass): MRB.
* lib/getprogname.c (getprogname): M.
* lib/getrusage.c (getrusage): M.
* lib/getsockopt.c (rpl_getsockopt): M.
* lib/getsubopt.c (getsubopt): M.
* lib/gettext.h (dcpgettext_expr): M.
(dcnpgettext_expr): M.
* lib/gettimeofday.c (gettimeofday): R.
* lib/getugroups.c (getugroups): MR.
* lib/getumask.c (getumask): R.
* lib/gl_anyavltree_list2.h (rebalance): MR.
(gl_tree_remove_node_from_tree): MR.
(gl_tree_nx_add_before): R.
(gl_tree_nx_add_after): R.
* lib/gl_anyhash2.h (hash_resize): M.
* lib/gl_anylinked_list2.h (gl_linked_get_at): R.
(gl_linked_nx_set_at): R.
(gl_linked_search_from_to): R.
(gl_linked_indexof_from_to): MR.
(gl_linked_nx_add_at): M.
(gl_linked_remove_node): M.
(gl_linked_remove_at): MR.
(gl_linked_iterator_from_to): M.
(gl_linked_sortedlist_search_from_to): R.
(gl_linked_sortedlist_indexof_from_to): R.
* lib/gl_anyrbtree_list2.h (rebalance_after_add): MR.
(gl_tree_remove_node_from_tree): M.
* lib/gl_anytree_list2.h (gl_tree_iterator): MB.
(gl_tree_sortedlist_indexof_from_to): R.
* lib/gl_anytree_omap.h (gl_tree_nx_getput): M.
(gl_tree_iterator): MB.
* lib/gl_anytree_oset.h (gl_tree_nx_add): M.
(gl_tree_update): M.
(gl_tree_iterator): MB.
* lib/gl_anytreehash_list1.h (add_to_bucket): M.
* lib/gl_array_list.c (grow): M.
(gl_array_nx_add_first): M.
(gl_array_nx_add_before): M.
(gl_array_nx_add_after): M.
(gl_array_nx_add_at): M.
(gl_array_remove_node): M.
(gl_array_remove_at): M.
* lib/gl_array_map.c (grow): M.
(gl_array_nx_getput): M.
(gl_array_remove_at): M.
* lib/gl_array_omap.c (grow): M.
(gl_array_nx_add_at): M.
(gl_array_remove_at): M.
* lib/gl_array_oset.c (grow): M.
(gl_array_nx_add_at): M.
(gl_array_remove_at): M.
* lib/gl_array_set.c (grow): M.
* lib/gl_avltree_ordered.h (rebalance): M.
(gl_tree_add_node_before): R.
(gl_tree_add_node_after): R.
(gl_tree_remove_node_no_free): M.
* lib/gl_carray_list.c (gl_carray_node_value): M.
(gl_carray_node_nx_set_value): M.
(gl_carray_get_at): M.
(gl_carray_nx_set_at): M.
(gl_carray_indexof_from_to): M.
(grow): M.
(gl_carray_nx_add_last): M.
(gl_carray_nx_add_at): M.
(gl_carray_remove_at): M.
(gl_carray_iterator_from_to): R.
(gl_carray_sortedlist_indexof_from_to): M.
(gl_carray_sortedlist_nx_add): M.
* lib/gl_rbtree_ordered.h (rebalance_after_add): M.
(gl_tree_remove_node_no_free): M.
* lib/gl_sublist.c (gl_sublist_sortedlist_search_from_to): M.
(gl_sublist_sortedlist_indexof_from_to): M.
* lib/glob.c (__glob): MR.
* lib/globfree.c (globfree): M.
* lib/glthread/lock.c (glthread_rwlock_init_for_glibc): M.
(glthread_rwlock_init_multithreaded): M.
(glthread_rwlock_rdlock_multithreaded): M.
(glthread_rwlock_wrlock_multithreaded): M.
(glthread_rwlock_destroy_multithreaded): M.
(glthread_rwlock_init_multithreaded): M.
(glthread_rwlock_rdlock_multithreaded): M.
(glthread_rwlock_wrlock_multithreaded): M.
(glthread_rwlock_unlock_multithreaded): M.
(glthread_rwlock_destroy_multithreaded): M.
(glthread_recursive_lock_init_multithreaded): M.
(glthread_recursive_lock_lock_multithreaded): M.
(glthread_recursive_lock_destroy_multithreaded): M.
(glthread_recursive_lock_init_multithreaded): M.
(glthread_recursive_lock_lock_multithreaded): M.
* lib/glthread/thread.c (gl_thread_create): M.
* lib/group-member.c (group_member): M.
(main): M.
* lib/hash.c (hash_get_next): MB.
(check_tuning): M.
(hash_initialize): M.
(hash_clear): M.
(hash_free): MS.
(transfer_entries): M.
(hash_rehash): MR.
(hash_insert_if_absent): MR.
(hash_remove): MR.
(hash_print): M.
* lib/hasmntopt.c (hasmntopt): M.
* lib/hmac.c (hmac_hash): R.
(GL_HMAC_FN): R.
* lib/human.c (group_number): MRO.
(human_readable): MR.
(humblock): M.
* lib/hypot.c (hypot): M.
* lib/hypotl.c (hypotl): M.
* lib/i-ring.c (i_ring_pop): M.
* lib/iconv_open.c (rpl_iconv_open): R.
* lib/idcache.c (getuidbyname): M.
(getgidbyname): M.
* lib/inet_ntop.c (inet_ntop4): M.
(inet_ntop6): R.
* lib/inet_pton.c (inet_pton4): MRBO.
(inet_pton6): MRBO.
* lib/ino-map.c (ino_map_insert): M.
* lib/integer_length.c (integer_length): M.
* lib/ioctl.c (rpl_ioctl): M.
(ioctl): M.
* lib/is_l-impl.h (FUNC): M.
* lib/isatty.c (IsCygwinConsoleHandle): R.
* lib/isnan.c (FUNC): MR.
* lib/javacomp.c (compile_using_envjavac): MRB.
(compile_using_javac): MB.
(execute_and_read_line): M.
(write_temp_file): M.
(get_classfile_version): MR.
(is_envjavac_usable): MR.
(is_javac_present): M.
(is_javac_usable): MR.
(compile_java_class): MR.
* lib/javaexec.c (execute_java_class): MRBO.
* lib/javaversion.c (execute_and_read_line): M.
(javaexec_version): R.
* lib/kwset.c (treefails): M.
(kwsprep): MRSB.
(bmexec_trans): MRSO.
(acexec_trans): MRS.
* lib/lchown.c (rpl_lchown): R.
* lib/linebuffer.c (readlinebuffer_delim): RO.
* lib/link.c (link): MRBO.
(rpl_link): M.
* lib/linkat.c (link_immediate): R.
(link_follow): M.
(linkat_follow): M.
* lib/localcharset.c (locale_charset): MR.
* lib/localeinfo.c (is_using_utf8): R. Rename 'mbs' to 'state'.
(init_localeinfo): Rename 's' to 'state'.
* lib/localename.c (gl_locale_name): MSB.
* lib/localename-environ.c (gl_locale_name_environ): MSB.
* lib/localename-unsafe.c (gl_locale_name_canonicalize): MSB.
(gl_locale_name_from_win32_LANGID): M.
(gl_locale_name_from_win32_LCID): M.
(enum_locales_fn): R.
(gl_locale_name_unsafe): MSB.
* lib/log2.c (log2): M.
* lib/log2f.c (log2f): M.
* lib/log2l.c (log2l): M.
* lib/login_tty.c (login_tty): M.
* lib/logl.c (logl): MR.
* lib/long-options.c (parse_long_options): MR.
(parse_gnu_standard_options_only): M.
* lib/mbfile.h (mbfile_multi_getc): MR.
* lib/mbmemcasecoll.c (apply_c32tolower): M.
(mbmemcasecoll): MR.
* lib/mbrtoc32.c (mbrtoc32): R.
* lib/mbrtowc.c (rpl_mbrtowc): MRS.
* lib/mbrtowc-impl.h: MRB.
* lib/mbscasestr.c (knuth_morris_pratt_multibyte): MR.
(mbscasestr): R.
* lib/mbscspn.c (mbscspn): MR.
* lib/mbsnrtowcs-impl.h (FUNC): M.
* lib/mbspbrk.c (mbspbrk): MR.
* lib/mbsrtowcs-impl.h (FUNC): M.
* lib/mbsspn.c (mbsspn): MR.
* lib/mbsstr.c (knuth_morris_pratt_multibyte): MR.
(mbsstr): MR.
* lib/mbswidth.c (mbsnwidth): M.
* lib/mbtowc-impl.h (mbtowc): MR.
* lib/mbtowc-lock.h (mbtowc_with_lock): M.
* lib/mcel.h: MR in comments.
* lib/md2.c (md2_finish_ctx): M.
(md2_process_bytes): M.
(md2_update_chksum): M.
(md2_compress): M.
* lib/md2-stream.c (md2_stream): MR.
* lib/md4.c (md4_finish_ctx): M.
(md4_process_block): MR.
* lib/md4-stream.c (md4_stream): MR.
* lib/md5-stream.c (md5_stream): MR.
* lib/mem-hash-map.c (compute_hashval): M.
(lookup): M.
* lib/memchr.c (__memchr): MRB.
* lib/memchr2.c (memchr2): MRB.
* lib/memrchr.c (__memrchr): MRB.
* lib/mgetgroups.c (mgetgroups): MRS.
* lib/mkancesdirs.c (mkancesdirs): M.
* lib/mkdir.c (rpl_mkdir): MR.
* lib/mkdir-p.c (make_dir_parents): R.
* lib/modechange.c (mode_compile): R.
* lib/mountlist.c (fstype_to_string): M.
(dev_from_mount_options): MR.
(read_file_system_list): MR.
* lib/mpsort.c (mpsort_into_tmp): M.
(mpsort_with_tmp): M.
* lib/msvc-inval.h (TRY_MSVC_INVAL): M.
* lib/mtx.c (mtx_init): MSB.
* lib/nanosleep.c (nanosleep): M.
* lib/nl_langinfo.c (ctype_codeset): MR.
(nl_langinfo_with_lock): M.
* lib/nonblocking.c (get_nonblocking_flag): M.
(set_nonblocking_flag): M.
* lib/nproc.c (num_processors_via_affinity_mask): M.
(cgroup2_mount): MR.
(get_cgroup2_cpu_quota): M.
(parse_omp_threads): Remove variable 'ret'.
(num_processors): M.
* lib/obstack.c (_obstack_newchunk): M.
(_obstack_allocated_p): M.
(__obstack_free): M.
* lib/obstack_printf.c (OBSTACK_PRINTF): M.
(OBSTACK_VPRINTF): M.
* lib/omp-init.c (parse_omp_threads): Remove variable 'ret'.
* lib/openat-proc.c (openat_proc_name): R.
* lib/openat2.c (do_openat2): R.
(openat2): MSB.
* lib/opendir.c (opendir): MR.
* lib/openpty.c (openpty): M.
* lib/os2-spawn.c (prepare_spawn): M.
(spawnpvech): R.
* lib/pagealign_alloc.c (pagealign_alloc): MR.
(pagealign_xalloc): M.
(pagealign_free): M.
* lib/parse-duration.c (parse_scaled_value): M.
(parse_year_month_day): M.
(parse_yearmonthday): MR.
(parse_YMWD): SB.
(parse_hour_minute_second): M.
(parse_hourminutesecond): MR.
(parse_HMS): SB.
(parse_time): M.
(parse_period): MR.
(parse_non_iso8601): M.
* lib/passfd.c (sendfd): MRO.
(recvfd): MRO.
* lib/perror.c (perror): M.
* lib/physmem.c (physmem_total): M.
(physmem_claimable): M.
* lib/pipe-filter-gi.c (filter_loop): MRB.
(pipe_filter_gi_create): M.
(pipe_filter_gi_close): M.
* lib/pipe-filter-ii.c (_beginthreadex): M.
(WaitForMultipleObjects): MR.
(pipe_filter_ii_execute): MRB.
* lib/poll.c (IsSocketHandle): R.
(windows_compute_revents): MRB.
(windows_compute_revents_socket): M.
(poll): MRB. Remove variable 'bRet'.
* lib/popen.c (rpl_popen): MB.
* lib/posix_openpt.c (posix_openpt): M.
* lib/posixtm.c (posix_time_parse): R.
(posixtime): R.
* lib/pread.c (pread): M.
* lib/printf.c (printf): M.
* lib/printf-frexp.c (FUNC): R.
* lib/printf-parse.c (PRINTF_PARSE): MR.
* lib/progreloc.c (maybe_executable): R.
(find_executable): MRSB.
(prepare_relocate): M.
* lib/propername.c (mbsstr_trimmed_wordbounded): RSB.
(proper_name_utf8): M.
* lib/pselect.c (pselect): MR.
* lib/pt_chown.c (do_pt_chown): MR.
* lib/pthread-cond.c (pthread_cond_timedwait): R.
* lib/pthread-rwlock.c (pthread_rwlockattr_init): MSB.
(pthread_rwlock_init): MSB.
(pthread_rwlock_rdlock): MSB.
(pthread_rwlock_wrlock): MSB.
(pthread_rwlock_tryrdlock): MB.
(pthread_rwlock_trywrlock): MB.
(pthread_rwlock_timedrdlock): MSB.
(pthread_rwlock_timedwrlock): MSB.
(pthread_rwlock_unlock): MSB.
(pthread_rwlock_destroy): MSB.
(pthread_rwlock_init): MSB.
(pthread_rwlock_timedrdlock): MRB.
(pthread_rwlock_timedwrlock): MRB.
* lib/pthread_mutex_timedlock.c (pthread_mutex_timedlock): MRB.
* lib/pthread_sigmask.c (pthread_sigmask): MR.
* lib/ptsname_r.c (ptsname_r): MR.
* lib/putenv.c (putenv): M.
* lib/pwrite.c (pwrite): M.
* lib/qcopy-acl.c (qcopy_acl): Remove a use of variable 'ret'.
* lib/qset-acl.c (qset_acl): M.
* lib/qsort.c (_quicksort): MR.
* lib/quotearg.c (set_quoting_flags): M.
(quotearg_buffer_restyled): MRSB.
* lib/random.c (__initstate): M.
(__setstate): M.
(__random): R.
* lib/random_r.c (__srandom_r): M.
(__setstate_r): MO.
(__random_r): M.
* lib/rawmemchr.c (rawmemchr): RB.
* lib/read-file.c (fread_file): M.
(read_file): M.
* lib/readdir.c (readdir): MR.
* lib/readline.c (readline): R.
* lib/readtokens.c (readtoken): R.
(readtokens): M.
* lib/regex-quote.c (regex_quote_spec_gnu): MB.
(regex_quote_spec_pcre): MB.
(regex_quote_length): MR.
(regex_quote): MB.
* lib/relocatable.c (set_this_relocation_prefix): M.
(compute_curr_prefix): MR.
(find_shared_library_fullname): MRS.
(relocate): M.
* lib/relocwrapper.c (activate_libdirs): MB.
(main): M.
* lib/rename.c (rpl_rename): MRBO.
* lib/renameatu.c (renameatu): MRB.
* lib/rijndael-alg-fst.c (rijndaelKeySetupEnc): MSB.
(rijndaelKeySetupDec): MRSB.
(rijndaelEncrypt): MSB.
(rijndaelDecrypt): MSB.
* lib/rijndael-api-fst.c (rijndaelMakeKey): MRSB.
(rijndaelCipherInit): MSB.
(rijndaelBlockEncrypt): MRSB.
(rijndaelPadEncrypt): MRSB.
(rijndaelBlockDecrypt): MRSB.
(rijndaelPadDecrypt): MRSB.
* lib/rmdir.c (rpl_rmdir): M.
* lib/rpmatch.c (localized_pattern): MS.
(try): M.
(rpmatch): MSB.
* lib/same.c (same_nameat): R. Remove variable 'flags'.
* lib/savedir.c (streamsavedir): MRB.
* lib/scandir.c (SCANDIR): MR.
* lib/select.c (IsSocketHandle): R.
(windows_poll_handle): MRSB. Remove variable 'bRet'.
(rpl_select): MR. Remove variable 'bRet'.
* lib/set-permissions.c (set_acls_from_mode): R.
(context_acl_from_mode): R.
(context_aclv_from_mode): M.
(set_acls_from_mode): MR.
(context_acl_from_mode): M.
(set_acls): R.
(set_permissions): MS.
* lib/setenv.c (__add_to_environ): M.
(rpl_setenv): M.
* lib/sethostname.c (sethostname): MR.
* lib/setlocale.c (setlocale_unixlike): MR.
(langcmp): R.
(setlocale_improved): MR.
* lib/setlocale_null.c (setlocale_null_r_with_lock): M.
(setlocale_null): M.
* lib/setsockopt.c (rpl_setsockopt): R.
* lib/sh-quote.c (shell_quote_argv): MB.
* lib/sha1.c (sha1_process_block): R.
* lib/sha1-stream.c (sha1_stream): M.
* lib/sha256.c (sha256_process_block): MR.
* lib/sha256-stream.c (shaxxx_stream): M.
* lib/sha3.c (sha3_read_ctx): R.
(sha3_process_block): R.
* lib/sha3-stream.c (sha3_xxx_stream): M.
* lib/sha512-stream.c (shaxxx_stream): M.
* lib/sig2str.c (str2signum): RS.
(sig2str): MR.
* lib/sigaction.c (sigaction_handler): MR.
(sigaction): MRB.
* lib/sigprocmask.c (sigprocmask): M.
* lib/sigsegv.c (sigsegv_handler): MR.
* lib/sincosl.c (kernel_sinl): MRS.
(kernel_cosl): MRS.
* lib/sinl.c (sinl): MR.
* lib/sleep.c (rpl_sleep): M.
* lib/sm3.c (sm3_process_block): MR.
* lib/sm3-stream.c (sm3_stream): MR.
* lib/snprintf.c (snprintf): M.
* lib/snzprintf.c (snzprintf): M.
* lib/socket.c (rpl_socket): M.
* lib/sockets.c (close_fd_maybe_socket): MR.
(ioctl_fd_maybe_socket): MR.
(gl_sockets_startup): M.
(gl_sockets_cleanup): M.
* lib/spawn-pipe.c (create_pipe): MR.
* lib/spawni.c (__spawni): Split variable declaration.
* lib/sprintf.c (sprintf): M.
* lib/sqrtl.c (sqrtl): MR.
* lib/ssfmalloc.h (allocate_block_from_pool): MSB.
* lib/stackvma.c (rof_open): M.
(vma_iterate_proc): RSB.
(vma_iterate_bsd): MB.
(mapped_range_start): M.
(mapped_range_end): M.
(is_unmapped): MR.
(mapped_range_start): M.
(mapped_range_end): M.
(vma_iterate): MR.
* lib/stat-w32.c (_gl_convert_FILETIME_to_timespec): R.
* lib/stdio-consolesafe.c (gl_consolesafe_fprintf): R.
(gl_consolesafe_printf): R.
* lib/stdio-read.c (CALL_WITH_ERRNO_FIX): M.
(scanf): M.
(fscanf): M.
* lib/stdio-write.c (CALL_WITH_SIGPIPE_EMULATION): M.
(printf): M.
(fprintf): M.
* lib/stpncpy.c (__stpncpy): MSB.
* lib/str-kmp.h (knuth_morris_pratt): M.
* lib/str-two-way.h (critical_factorization): MSB.
(two_way_short_needle): MS.
(two_way_long_needle): MRS.
* lib/strcasecmp.c (strcasecmp): R.
* lib/strcasecmp_l.c (strcasecmp_l): MR.
* lib/strcasestr.c (strcasestr): MRSB.
* lib/strchrnul.c (strchrnul): MRB.
* lib/strerror.c (strerror): M.
* lib/strerror_l.c (strerror_l_r): R.
* lib/strerror_r.c (local_snprintf): M.
(strerror_r): M.
* lib/strfmon_l.c (rpl_strfmon_l): MR.
* lib/strftime.c (__strftime_internal): MR.
* lib/striconv.c (mem_cd_iconv): MR.
(str_cd_iconv): MR.
(str_iconv): M.
* lib/striconveh.c (iconveh_open): MR.
(utf8conv_carefully): M.
(mem_cd_iconveh_internal): MR.
(mem_iconveh): M.
(str_iconveh): M.
* lib/striconveha.c (uniconv_register_autodetect): MRSB.
(mem_iconveha_notranslit): MS.
(mem_iconveha): M.
(str_iconveha_notranslit): MS.
(str_iconveha): M.
* lib/string-buffer-printf.c (sb_appendvf): R.
(sb_appendf): R.
* lib/string-buffer-reversed-printf.c (sbr_prependvf): R.
(sbr_prependf): R.
* lib/string-desc.c (sd_new): R.
* lib/stripslash.c (strip_trailing_slashes): M.
* lib/strncasecmp.c (strncasecmp): R.
* lib/strncasecmp_l.c (strncasecmp_l): MR.
* lib/strptime.c (__strptime_internal): RSB.
* lib/strsep.c (strsep): R.
* lib/strsignal.c (strsignal): R.
* lib/strstr.c (strstr): MRSB.
* lib/strtod.c (parse_number): MR.
(STRTOD): MR.
* lib/strtok_r.c (__strtok_r): M.
* lib/strtol.c (strtol): MR.
* lib/struniq.h (struniq): M.
* lib/supersede.c (open_supersede): R.
* lib/system-quote.c (system_quote_argv): MB.
* lib/szprintf.c (szprintf): M.
* lib/tanl.c (kernel_tanl): MRS.
(tanl): MR.
* lib/tempname.c (try_tempname_len): M.
* lib/term-style-control.c (sprintf_integer): MR.
* lib/textstyle.in.h (ostream_printf): MR.
* lib/time.c (time): M.
* lib/times.c (filetime2clock): M.
* lib/timespec-add.c (timespec_add): R.
* lib/timespec-sub.c (timespec_sub): R.
* lib/tmpdir.c (path_search): MR.
* lib/tmpfile.c (tmpfile): M.
* lib/to_l-impl.h (FUNC): M.
* lib/tparm.c (tparm): MRB.
* lib/trigl.c (ieee754_rem_pio2l): MRS.
(kernel_rem_pio2): MRS.
* lib/trim.c (trim2): MR.
* lib/tsearch.c (check_tree): R.
(maybe_split_for_insert): M.
(__tsearch): MR.
(__tfind): M.
(__tdelete): MRB.
* lib/ttyname_r.c (ttyname_r): M.
* lib/uname.c (uname): MR.
* lib/unicase/locale-language.c (uc_locale_language): M.
* lib/unicase/u-casecmp.h (FUNC): MR.
* lib/unicase/u-casecoll.h (FUNC): MR.
* lib/unicase/u-casemap.h (FUNC): MR.
* lib/unicase/u-casexfrm.h (FUNC): MR.
* lib/unicase/u-ct-casefold.h (FUNC): MR.
* lib/unicase/u-ct-totitle.h (FUNC): MR.
* lib/unicase/u-is-cased.h (FUNC): MR.
* lib/unicase/u-is-invariant.h (FUNC): MR.
* lib/unicase/u8-casefold.c (read_file): M.
* lib/unicase/u8-tolower.c (read_file): M.
* lib/unicase/u8-totitle.c (read_file): M.
* lib/unicase/u8-toupper.c (read_file): M.
* lib/unicase/ulc-casecmp.c (ulc_u8_casefold): MR.
* lib/unicase/ulc-casexfrm.c (ulc_casexfrm): MR.
* lib/unicodeio.c (unicode_to_mb): MR.
* lib/uniconv/u-conv-from-enc.h (FUNC): M.
* lib/uniconv/u-conv-to-enc.h (FUNC): MR.
* lib/uniconv/u-strconv-from-enc.h (FUNC): M.
* lib/uniconv/u-strconv-to-enc.h (FUNC): M.
* lib/uniconv/u16-conv-to-enc.c (FUNC): MR.
* lib/uniconv/u8-conv-from-enc.c (u8_conv_from_encoding): R.
* lib/uniconv/u8-conv-to-enc.c (u8_conv_to_encoding): R.
* lib/uniconv/u8-strconv-to-enc.c (u8_strconv_to_encoding): MS.
* lib/unictype/3level.h (CONCAT(TABLE,_add)): M.
(CONCAT(TABLE,_finalize)): MRB.
* lib/unictype/3levelbit.h (CONCAT(TABLE,_add)): M.
(CONCAT(TABLE,_finalize)): MRB.
* lib/unictype/bidi_byname.c (uc_bidi_class_byname): M.
* lib/unictype/categ_and.c (uc_general_category_and): MR.
* lib/unictype/categ_and_not.c (uc_general_category_and_not): MR.
* lib/unictype/categ_byname.c (uc_general_category_byname): M.
* lib/unictype/categ_of.c (uc_general_category): R.
* lib/unictype/categ_or.c (uc_general_category_or): MR.
* lib/unictype/combiningclass_byname.c (uc_combining_class_byname): M.
* lib/unictype/incb_byname.c (uc_indic_conjunct_break_byname): M.
* lib/unictype/joininggroup_byname.c (uc_joining_group_byname): M.
* lib/unictype/joiningtype_byname.c (uc_joining_type_byname): M.
* lib/unictype/pr_byname.c (uc_property_byname): MRB.
* lib/unictype/scripts.c (uc_script_byname): M.
* lib/unigbrk/u-grapheme-prev.h
(ends_with_incb_consonant_extended_linker_extended): M.
(ends_with_emoji_modifier_sequence): M.
(ends_with_ri_count): M.
(FUNC): M.
* lib/unigbrk/uc-is-grapheme-break.c (uc_is_grapheme_break): M.
* lib/unigbrk/ulc-grapheme-breaks.c (ulc_grapheme_breaks): M.
* lib/unilbrk/u16-width-linebreaks.c (u16_width_linebreaks_internal): M.
* lib/unilbrk/u32-width-linebreaks.c (u32_width_linebreaks_internal): M.
* lib/unilbrk/u8-possible-linebreaks.c (read_file): M.
* lib/unilbrk/u8-width-linebreaks.c (u8_width_linebreaks_internal): M.
(read_file): M.
* lib/unilbrk/ulc-possible-linebreaks.c
(ulc_possible_linebreaks_internal): M.
(read_file): M.
* lib/unilbrk/ulc-width-linebreaks.c (ulc_width_linebreaks_internal): M.
(read_file): M.
* lib/uniname/uniname.c (unicode_name_word): MR.
(unicode_character_name): M.
(unicode_name_character): MR.
* lib/uninorm/canonical-decomposition.c (uc_canonical_decomposition): M.
* lib/uninorm/composition.c (uc_composition): M.
* lib/uninorm/decomposition.c (uc_decomposition): M.
* lib/uninorm/u-normalize-internal.h (FUNC): MR.
* lib/uninorm/u-normcmp.h (FUNC): MR.
* lib/uninorm/u-normcoll.h (FUNC): MR.
* lib/uninorm/u-normxfrm.h (FUNC): MR.
* lib/uninorm/uninorm-filter.c (uninorm_filter_write): M.
* lib/unistdio/u-asnprintf.h (ASNPRINTF): M.
* lib/unistdio/u-asprintf.h (ASPRINTF): M.
* lib/unistdio/u-snprintf.h (SNPRINTF): M.
* lib/unistdio/u-sprintf.h (SPRINTF): M.
* lib/unistdio/u-vsnprintf.h (VSNPRINTF): M.
* lib/unistdio/u-vsprintf.h (VSPRINTF): M.
* lib/unistdio/ulc-fprintf.c (ulc_fprintf): M.
* lib/unistdio/ulc-vfprintf.c (ulc_vfprintf): M.
* lib/unistr/u16-chr.c (u16_chr): R.
* lib/unistr/u16-mbsnlen.c (u16_mbsnlen): M.
* lib/unistr/u16-next.c (u16_next): M.
* lib/unistr/u16-strchr.c (u16_strchr): R.
* lib/unistr/u16-strrchr.c (u16_strrchr): R.
* lib/unistr/u16-to-u32.c (FUNC): MR.
* lib/unistr/u16-to-u8.c (FUNC): MR.
* lib/unistr/u32-next.c (u32_next): M.
* lib/unistr/u32-to-u16.c (FUNC): MR.
* lib/unistr/u32-to-u8.c (FUNC): MR.
* lib/unistr/u8-chr.c (u8_chr): M.
* lib/unistr/u8-mbsnlen.c (u8_mbsnlen): M.
* lib/unistr/u8-next.c (u8_next): M.
* lib/unistr/u8-strchr.c (u8_strchr): R.
* lib/unistr/u8-strrchr.c (u8_strrchr): R.
* lib/unistr/u8-to-u16.c (FUNC): MR.
* lib/unistr/u8-to-u32.c (FUNC): MR.
* lib/uniwbrk/u8-wordbreaks.c (read_file): M.
* lib/uniwbrk/ulc-wordbreaks.c (ulc_wordbreaks): M.
(read_file): M.
* lib/uniwidth/u16-width.c (u16_width): M.
* lib/uniwidth/u32-width.c (u32_width): M.
* lib/uniwidth/u8-width.c (u8_width): M.
* lib/unlinkat.c (rpl_unlinkat): MR.
* lib/unsetenv.c (unsetenv): M.
(rpl_unsetenv): R.
* lib/userspec.c (parse_with_separator): MRS.
(main): MR.
* lib/utime.c (_gl_utimens_windows): M.
* lib/utimecmp.c (utimecmpat): R.
* lib/utimens.c (validate_timespec): R.
(fdutimens): MR.
(lutimens): MR.
* lib/utimensat.c (rpl_utimensat): M.
* lib/vasnprintf.c (divide): M.
(decode_long_double): MR.
(decode_double): MR.
(scale10_round_decimal_decoded): MR.
(floorlog10l): MR.
(floorlog10): MR.
(VASNPRINTF): MR.
* lib/vc-mtime.c (is_git_present): MR.
(git_vc_controlled): MR.
(git_unmodified): M.
(git_mtime): MR.
(abs_git_checkout): MR.
(max_vc_mtime): MR.
* lib/vdzprintf.c (vdzprintf): M.
* lib/vfzprintf.c (vfzprintf): M.
* lib/vma-iter.c (rof_open): M.
(vma_iterate_proc): MRSB.
(vma_iterate_bsd): MB.
(vma_iterate): MR.
* lib/vsnzprintf.c (vsnzprintf): M.
* lib/vszprintf.c (vszprintf): M.
* lib/wait-process.c (klibc_waitpid): M.
(wait_subprocess): MR.
* lib/wcs-two-way.h (critical_factorization): MSB.
(two_way_short_needle): MS.
* lib/wcsstr-impl.h (FUNC): MRSB.
* lib/wcswidth-impl.h (FUNC): B.
* lib/wcsxfrm-impl.h (wcsxfrm): MR.
* lib/wctomb-impl.h (wctomb): M.
* lib/wgetcwd-lgpl.c (wgetcwd): MRS.
* lib/windows-cond.c (glwthread_waitqueue_add): M.
(glwthread_waitqueue_notify_first): M.
(glwthread_waitqueue_notify_all): M.
(glwthread_cond_wait): M.
(glwthread_cond_timedwait): MRS.
* lib/windows-cygpath.c (execute_and_read_line): MR.
* lib/windows-rwlock.c (glwthread_waitqueue_add): M.
(glwthread_rwlock_rdlock): M.
(glwthread_rwlock_wrlock): M.
* lib/windows-spawn.c (quoted_arg_length): M.
(quoted_arg_string): M.
(prepare_spawn): MR.
(compose_command): MRB.
(compose_envblock): RSB.
* lib/windows-thread.c (glwthread_thread_self): M.
(glwthread_thread_create): M.
* lib/windows-timedmutex.c (glwthread_timedmutex_timedlock): MR.
* lib/windows-timedrecmutex.c (glwthread_timedrecmutex_timedlock): MR.
* lib/windows-timedrwlock.c (glwthread_waitqueue_add): M.
(glwthread_waitqueue_notify_first): M.
(glwthread_waitqueue_notify_all): M.
(glwthread_timedrwlock_rdlock): M.
(glwthread_timedrwlock_wrlock): M.
(glwthread_timedrwlock_timedrdlock): MR.
(glwthread_timedrwlock_timedwrlock): MR.
* lib/xasprintf.c (xasprintf): M.
* lib/xconcat-filename.c (xconcatenated_filename): M.
* lib/xmalloc.c (xpalloc): R.
* lib/xmalloca.c (xmmalloca): M.
* lib/xprintf.c (xprintf): M.
(xfprintf): M.
* lib/xstring-buffer-printf.c (sb_xappendf): M.
* lib/xstring-buffer-reversed-printf.c (sbr_xprependf): M.
* lib/xstrtod.c (XSTRTOD): MR.
* lib/xstrtol.c (__xstrtol): R.
* lib/xstrtol-error.c (xstrtol_error): R.
* lib/xvasprintf.c (xstrcat): MB.
(xvasprintf): R.
* lib/zprintf.c (zprintf): M.

7 weeks agoRemove unnecessary variable initializations.
Bruno Haible [Tue, 9 Dec 2025 23:09:28 +0000 (00:09 +0100)] 
Remove unnecessary variable initializations.

* lib/argp-parse.c (parser_parse_next): Don't initialize err.
* lib/argz.c (argz_create_sep): Don't assign *len unnecessarily.
* lib/bitset/table.c (tbitset_op3_cmp): Don't initialize j.
* lib/canonicalize.c (canonicalize_filename_mode_stk): Don't initialize
prefix_len unnecessarily.
* lib/canonicalize-lgpl.c (realpath_stk): Likewise.
* lib/javacomp.c (get_compiler_version): Don't initialize version_start.
* lib/parse-duration.c (parse_time): Don't initialize res.
* lib/read-file.c (fread_file): Don't initialize buf.
* lib/tempname.c (try_tempname_len): Don't initialize fd.

7 weeks agopipe-filter-ii: Avoid some 'goto' statements.
Bruno Haible [Tue, 9 Dec 2025 22:47:56 +0000 (23:47 +0100)] 
pipe-filter-ii: Avoid some 'goto' statements.

* lib/pipe-filter-ii.c (_beginthreadex, WaitForMultipleObjects)
[__KLIBC__]: Avoid 'goto'.

7 weeks agossfmalloc: Simplify.
Bruno Haible [Tue, 9 Dec 2025 22:39:04 +0000 (23:39 +0100)] 
ssfmalloc: Simplify.

* lib/ssfmalloc.h (allocate_block_from_pool): Unify common code in
if/else branches.

7 weeks agostring-desc: Remove unnecessary variable.
Bruno Haible [Tue, 9 Dec 2025 22:33:46 +0000 (23:33 +0100)] 
string-desc: Remove unnecessary variable.

* lib/string-desc.c (_sd_copy): Remove unnecessary variable 'n'.

7 weeks agoselect: Remove unused variable (regression 2025-11-18).
Bruno Haible [Tue, 9 Dec 2025 22:31:13 +0000 (23:31 +0100)] 
select: Remove unused variable (regression 2025-11-18).

* lib/select.c (rpl_select): Remove unused variable 'i'.

7 weeks agorelocatable-lib: Fix and simplify previous commit.
Bruno Haible [Tue, 9 Dec 2025 13:58:00 +0000 (14:58 +0100)] 
relocatable-lib: Fix and simplify previous commit.

* m4/relocatable-lib.m4 (gl_RELOCATABLE_LIBRARY_BODY): Invoke gl_LIBDL.
Define HAVE_DLADDR_IN_LIBC.
* modules/relocatable-lib (configure.ac): Revert last change.
* modules/relocatable-lib-lgpl (Files): Add m4/libdl.m4.
(configure.ac): Revert last change.
* lib/relocatable.c (_GL_USE_PROCFS, _GL_USE_WIN32, _GL_USE_DLADDR):
Remove macros.
(ENABLE_COSTLY_RELOCATABLE): Update comments.
(find_shared_library_fullname): Use dladdr as first alternative. Test
HAVE_DLADDR_IN_LIBC instead of _GL_USE_PROCFS. Define as macro.
(get_shared_library_fullname): Update comments. Test
find_shared_library_fullname instead of _GL_USE_WIN32.

7 weeks agorelocatable-lib: Find shared library filename via dladdr.
Reuben Thomas [Mon, 8 Dec 2025 18:59:01 +0000 (18:59 +0000)] 
relocatable-lib: Find shared library filename via dladdr.

* lib/relocatable.c (_GL_USE_PROCFS, _GL_USE_WIN32, _GL_USE_DLADDR):
New macros.
(find_shared_library_fullname): Use dladdr if _GL_USE_DLADDR is defined.
(get_shared_library_fullname): Use _GL_USE_WIN32.
* m4/libdl.m4 (gl_LIBDL): Update comment.
* modules/relocatable-lib (Files): Add m4/libdl.m4.
(configure.ac): Invoke gl_LIBDL. Define _GL_DLADDR_IN_LIBC.
* modules/relocatable-lib-lgpl (configure.ac): Likewise.

7 weeks agodoc: update gnulib-common comments
Paul Eggert [Mon, 8 Dec 2025 07:08:54 +0000 (23:08 -0800)] 
doc: update gnulib-common comments

* m4/gnulib-common.m4: Attempt to explain pure/const
and reproducible/unsequenced more clearly and precisely.

7 weeks agoargp: Replace some 'continue;' statements with if/else.
Bruno Haible [Sun, 7 Dec 2025 21:19:35 +0000 (22:19 +0100)] 
argp: Replace some 'continue;' statements with if/else.

* lib/argp-help.c (validate_uparams): Use if/else instead of
'continue;'.

7 weeks agodoc: Fix a typo.
G. Branden Robinson [Sun, 7 Dec 2025 09:33:10 +0000 (03:33 -0600)] 
doc: Fix a typo.

* doc/posix-functions/sinl.texi: Fix typo in last commit.

Copyright-paperwork-exempt: Yes

7 weeks agoautoupdate
Karl Berry [Sun, 7 Dec 2025 16:24:59 +0000 (08:24 -0800)] 
autoupdate

8 weeks agosinl: Work around NetBSD 10.0 bug.
Bruno Haible [Thu, 4 Dec 2025 21:51:59 +0000 (22:51 +0100)] 
sinl: Work around NetBSD 10.0 bug.

* lib/math.in.h (sinl): Consider REPLACE_SINL.
* m4/sinl.m4 (gl_FUNC_SINL): Test whether sinl works. Set REPLACE_SINL
to 1 if not.
* m4/math_h.m4 (gl_MATH_H_DEFAULTS): Initialize REPLACE_SINL.
* modules/math-h (Makefile.am): Substitute REPLACE_SINL.
* modules/sinl (configure.ac): Consider REPLACE_SINL.
* doc/posix-functions/sinl.texi: Mention the NetBSD bug.

8 weeks agoexpf, sinf, cosf, ...: Fix possible error on MSVC.
Bruno Haible [Thu, 4 Dec 2025 21:04:04 +0000 (22:04 +0100)] 
expf, sinf, cosf, ...: Fix possible error on MSVC.

* modules/sqrtf (configure.ac): Consider REPLACE_SQRTF.
* modules/expf (configure.ac): Consider REPLACE_EXPF.
* modules/sinf (configure.ac): Consider REPLACE_SINF.
* modules/cosf (configure.ac): Consider REPLACE_COSF.
* modules/tanf (configure.ac): Consider REPLACE_TANF.
* modules/sinhf (configure.ac): Consider REPLACE_SINHF.
* modules/coshf (configure.ac): Consider REPLACE_COSHF.
* modules/tanhf (configure.ac): Consider REPLACE_TANHF.
* modules/asinf (configure.ac): Consider REPLACE_ASINF.
* modules/acosf (configure.ac): Consider REPLACE_ACOSF.
* modules/atanf (configure.ac): Consider REPLACE_ATANF.
* modules/atan2f (configure.ac): Consider REPLACE_ATAN2F.

8 weeks agofile-remote: Fix compilation error on FreeBSD 5.2.1.
Bruno Haible [Thu, 4 Dec 2025 19:56:19 +0000 (20:56 +0100)] 
file-remote: Fix compilation error on FreeBSD 5.2.1.

* lib/file-remote.c [FreeBSD]: Before <sys/mount.h>, include
<sys/types.h> and <sys/param.h>.

8 weeks agoissymlinkat: Remove accidental dependency from issymlink on $(LIBINTL).
Bruno Haible [Thu, 4 Dec 2025 19:53:25 +0000 (20:53 +0100)] 
issymlinkat: Remove accidental dependency from issymlink on $(LIBINTL).

* lib/issymlinkat.h: New file, based on lib/issymlink.h.
* lib/issymlink.h (_GL_ISSYMLINKAT_INLINE, issymlinkat): Remove
definitions.
* lib/issymlinkat.c: Include issymlinkat.h instead of issymlink.h.
* lib/fchmodat.c: Likewise.
* lib/renameatu.c: Likewise.
* lib/unlinkat.c: Likewise.
* lib/lchmod.c: Include issymlinkat.h.
* modules/issymlinkat (Files): Add lib/issymlinkat.h. Remove
lib/issymlink.h.
(Include): Specify issymlinkat.h instead of issymlink.h.
* NEWS: Mention the change.

8 weeks agomaint: fit bootstrap into 80 columns
Paul Eggert [Thu, 4 Dec 2025 19:37:48 +0000 (11:37 -0800)] 
maint: fit bootstrap into 80 columns

This is for GNU grep’s sc_long_lines test.

8 weeks agomalloc-posix: improve commentary
Paul Eggert [Thu, 4 Dec 2025 17:38:39 +0000 (09:38 -0800)] 
malloc-posix: improve commentary

* m4/malloc.m4: Improve commentary in response to:
https://lists.gnu.org/r/bug-gnulib/2025-12/msg00038.html

8 weeks agoDocument modern C coding style.
Bruno Haible [Thu, 4 Dec 2025 17:09:43 +0000 (18:09 +0100)] 
Document modern C coding style.

* HACKING (Coding Style): New section.

8 weeks agodoc: Tweak verify.h example.
Basil L. Contovounesios [Thu, 20 Nov 2025 20:58:19 +0000 (21:58 +0100)] 
doc: Tweak verify.h example.

* doc/verify.texi (Compile-time Assertions): Fix typo and prevent page
breaks in example.

8 weeks agoRename some local variables.
Bruno Haible [Thu, 4 Dec 2025 09:19:39 +0000 (10:19 +0100)] 
Rename some local variables.

* lib/backupfile.c (backupfile_internal): Rename e to saved_errno.
* lib/dirchownmod.c (dirchownmod): Likewise.
* lib/exclude.c (add_exclude_file): Likewise.
* lib/fd-safer.c (fd_safer): Likewise.
* lib/fd-safer-flag.c (fd_safer_flag): Likewise.
* lib/fopen-safer.c (fopen_safer): Likewise.
* lib/pipe2-safer.c (pipe2_safer): Likewise.
* lib/quotearg.c (clone_quoting_options, quotearg_buffer,
quotearg_alloc_mem, quotearg_n_options): Likewise.
* lib/savewd.c (savewd_chdir): Likewise.
* lib/tmpfile-safer.c (tmpfile_safer): Likewise.
* lib/file-has-acl.c (acl_get_link_np): Rename err to saved_errno.
* lib/free.c (rpl_free): Likewise.
* lib/fts.c (fts_build, fts_lfree): Likewise.
* lib/getloadavg.c (getloadavg): Likewise.
* lib/hash.c (hash_free, hash_rehash): Likewise.
* lib/time_rz.c (tzfree): Likewise.
* lib/scandir.c (SCANDIR): Rename save to saved_errno.

8 weeks agomemmem, strstr: Replace some 'continue;' statements with if/else.
Bruno Haible [Thu, 4 Dec 2025 07:12:05 +0000 (08:12 +0100)] 
memmem, strstr: Replace some 'continue;' statements with if/else.

* lib/str-two-way.h (two_way_long_needle): Use if/else instead of
'continue;'.

8 weeks agotanl: Fix result for negative values.
Bruno Haible [Wed, 3 Dec 2025 22:48:39 +0000 (23:48 +0100)] 
tanl: Fix result for negative values.

* lib/tanl.c (kernel_tanl): In all code branches, multiply the result
with the sign of x.
* tests/test-tanl.c (main): Test two small negative values.

8 weeks agodoc: Fix typo.
Bruno Haible [Wed, 3 Dec 2025 19:38:27 +0000 (20:38 +0100)] 
doc: Fix typo.

Reported by Pádraig Brady <P@draigBrady.com>.

* doc/posix-functions/stpncpy.texi: Fix typo.
* doc/posix-functions/strncpy.texi: Likewise.

8 weeks agosinl: Fix result for small negative values.
Bruno Haible [Wed, 3 Dec 2025 17:49:34 +0000 (18:49 +0100)] 
sinl: Fix result for small negative values.

* lib/sincosl.c (kernel_sinl): For small |x|, multiply the result with
the sign of x.
* tests/test-sinl.c (main): Test two small negative values.

8 weeks agodoc: Update regarding FreeBSD 15.0/x86_64.
Bruno Haible [Wed, 3 Dec 2025 17:27:54 +0000 (18:27 +0100)] 
doc: Update regarding FreeBSD 15.0/x86_64.

* doc/posix-functions/stpncpy.texi: Reference the FreeBSD bug.
* doc/posix-functions/strncpy.texi: Likewise.

8 weeks agoautoupdate
Karl Berry [Wed, 3 Dec 2025 16:01:58 +0000 (08:01 -0800)] 
autoupdate

8 weeks agotests: Update an old manual test.
Bruno Haible [Tue, 2 Dec 2025 23:07:21 +0000 (00:07 +0100)] 
tests: Update an old manual test.

* tests/test-stpncpy.c (main): Fix printf call on 64-bit platforms.

8 weeks agostpncpy: Add workaround for FreeBSD 15.0/x86_64.
Bruno Haible [Tue, 2 Dec 2025 23:06:14 +0000 (00:06 +0100)] 
stpncpy: Add workaround for FreeBSD 15.0/x86_64.

* m4/stpncpy.m4 (gl_FUNC_STPNCPY): Check against FreeBSD bug, using code
taken from m4/strncpy.m4.
* modules/stpncpy (Files): Add m4/mmap-anon.m4.
* doc/posix-functions/stpncpy.texi: Mention the FreeBSD bug.

8 weeks agoMake use of the strncpy module.
Bruno Haible [Tue, 2 Dec 2025 21:18:52 +0000 (22:18 +0100)] 
Make use of the strncpy module.

* modules/unistr/u8-strncpy (Depends-on): Add strncpy.
* modules/crypto/rijndael (Depends-on): Likewise.
* modules/gethostname (Depends-on): Likewise.
* modules/localename-unsafe (Depends-on): Likewise.
* modules/localename-unsafe-limited (Depends-on): Likewise.
* modules/regex (Depends-on): Likewise.
* modules/setlocale-fixes (Depends-on): Likewise.

8 weeks agostrncpy: Add workaround for FreeBSD 15.0/x86_64.
Bruno Haible [Tue, 2 Dec 2025 21:14:13 +0000 (22:14 +0100)] 
strncpy: Add workaround for FreeBSD 15.0/x86_64.

* lib/string.in.h (strncpy): New declaration.
* lib/strncpy.c: New file, based on lib/wcsncpy-impl.h.
* m4/strncpy.m4: New file, based on m4/strncat.m4.
* m4/string_h.m4 (gl_STRING_H): Test whether strncpy is declared.
(gl_STRING_H_REQUIRE_DEFAULTS): Initialize GNULIB_STRNCPY.
(gl_STRING_H_DEFAULTS): Initialize REPLACE_STRNCPY.
* modules/string-h (Makefile.am): Substitute GNULIB_STRNCPY,
REPLACE_STRNCPY.
* modules/strncpy (Status, Notice): Remove.
(Files): Add lib/strncpy.c, m4/strncpy.m4, m4/mmap-anon.m4.
(configure.ac): Invoke gl_FUNC_STRNCPY. Arrange to define
GNULIB_STRNCPY. Add GL_COND_OBJ_STRNCPY conditional.
(Makefile.am): Arrange to conditionally compile strncpy.c.
* tests/test-string-h-c++.cc: Check signature of strncpy.
* doc/posix-functions/strncpy.texi: Mention the FreeBSD bug.

8 weeks agostrncpy tests: Enhance test.
Bruno Haible [Tue, 2 Dec 2025 20:44:08 +0000 (21:44 +0100)] 
strncpy tests: Enhance test.

* tests/test-strncpy.c: Include zerosize-ptr.h.
(MAGIC): New macro.
(check-single, check): New functions, based on
tests/unistr/test-strncpy.h.
(main): Invoke check().
* modules/strncpy-tests (Files): Add tests/zerosize-ptr.h,
m4/mmap-anon.m4.
(Depends-on): Add extensions.
(configure.ac): Invoke gl_FUNC_MMAP_ANON. Check for <sys/mman.h> and
mprotect.

8 weeks agorealloc-posix: Add workaround for FreeBSD 15.0.
Bruno Haible [Tue, 2 Dec 2025 20:08:31 +0000 (21:08 +0100)] 
realloc-posix: Add workaround for FreeBSD 15.0.

* m4/realloc.m4 (gl_FUNC_REALLOC_POSIX): Test whether realloc sets
errno on failure. Define HAVE_REALLOC_POSIX if yes. Use the
gl_FUNC_MALLOC_POSIX result only on non-BSD platforms.
* m4/malloc.m4 (gl_FUNC_MALLOC_POSIX, gl_CHECK_MALLOC_POSIX): Don't
mention realloc here. Update comments.
* lib/realloc.c (rpl_realloc): Test HAVE_REALLOC_POSIX instead of
HAVE_MALLOC_POSIX.
* doc/posix-functions/realloc.texi: Mention FreeBSD 15 bug.

8 weeks agodup2: help the compiler a bit
Paul Eggert [Tue, 2 Dec 2025 18:42:52 +0000 (10:42 -0800)] 
dup2: help the compiler a bit

* lib/dup2.c (klibc_dup2dirfd, klibc_dup2, rpl_dup2): Help the
compiler leave a register alone, and/or test just the sign bit.

8 weeks agodup2, fcntl: Fix the race condition on OS/2 kLIBC
KO Myung-Hun [Tue, 2 Dec 2025 11:43:28 +0000 (20:43 +0900)] 
dup2, fcntl: Fix the race condition on OS/2 kLIBC

dup2() may return an fd other than the desired fd if other threads are
involved.  fcntl() may close the fd used by other threads accidentally.
* lib/dup2.c (klibc_dup2dirfd): Ensure duplication to the desired fd.
(klibd_dup2): Do not close the desired fd.
* lib/fcntl.c (klibc_dupdirfd): New.
(klibc_fcntl): Use klibc_dupdirfd() instead of dup2().

8 weeks agoFix compilation error in C++ mode on FreeBSD 15.
Bruno Haible [Tue, 2 Dec 2025 15:30:44 +0000 (16:30 +0100)] 
Fix compilation error in C++ mode on FreeBSD 15.

* lib/math.in.h (isfinite): In C++ mode with clang >= 19, use the
approach with C preprocessor macro.

8 weeks agodoc: Mention a portability problem of sig2str.
Bruno Haible [Tue, 2 Dec 2025 08:39:05 +0000 (09:39 +0100)] 
doc: Mention a portability problem of sig2str.

Reported by Collin Funk in
<https://lists.gnu.org/archive/html/bug-gnulib/2025-12/msg00007.html>.

* doc/posix-functions/sig2str.texi: Mention the argument 0 problem.

8 weeks agoopenat2: port to O_RESOLVE_BENEATH && !ENOTCAPABLE
Paul Eggert [Mon, 1 Dec 2025 22:30:03 +0000 (14:30 -0800)] 
openat2: port to O_RESOLVE_BENEATH && !ENOTCAPABLE

Problem reported by Bruno Haible in:
https://lists.gnu.org/r/bug-gnulib/2025-12/msg00000.html
Also, fix related bugs involving ENOTCAPABLE.
* lib/openat2.c (do_openat2): Do not map ENOTCAPABLE to EXDEV.
On platforms with ENOTCAPABLE, an ENOTCAPABLE failure here
has nothing to do with O_RESOLVE_BENEATH.
(openat2): Port to macOS 15, which lacks ENOTCAPABLE,
and where O_RESOLVE_BENEATH violations set errno = EACCES.
Don’t assume that an openat2 ENOTCAPABLE (or on macOS 15, EACCES)
failure means an O_RESOLVE_BENEATH failure;
it could merely mean that the process is in capability mode.

8 weeks agoUpdate some C23 citations
Paul Eggert [Sun, 30 Nov 2025 18:08:27 +0000 (10:08 -0800)] 
Update some C23 citations

2 months agoHACKING: Add remark about ChangeLog entry dates.
Bruno Haible [Sun, 30 Nov 2025 20:08:52 +0000 (21:08 +0100)] 
HACKING: Add remark about ChangeLog entry dates.

* HACKING (Using git): Add reference to GNU Coding Standards.

2 months agofcntl: Fix out of sync of flags on OS/2.
KO Myung-Hun [Sun, 30 Nov 2025 11:38:52 +0000 (20:38 +0900)] 
fcntl: Fix out of sync of flags on OS/2.

* lib/fcntl.c (klibc_fcntl): Use libc functions for F_GETFD/F_SETFD
action, instead of native OS/2 functions.

2 months agomcel: Fix typo in description.
Reuben Thomas [Sun, 30 Nov 2025 15:45:25 +0000 (16:45 +0100)] 
mcel: Fix typo in description.

* modules/mcel (Description): Fix typo.

2 months agomcel: update mcel_eq comments
Paul Eggert [Fri, 28 Nov 2025 06:46:26 +0000 (22:46 -0800)] 
mcel: update mcel_eq comments

* lib/mcel.h (mcel_eq): Prefer the more-precise “Are C1 and C2
equal?” to the longer “Return true if C1 and C2 are equal”.
Logically speaking, the longer form does not specify what value is
returned when C1 and C2 are not equal.

2 months agomcel: prefer mcel_eq to mcel_cmp if either works
Paul Eggert [Fri, 28 Nov 2025 06:43:31 +0000 (22:43 -0800)] 
mcel: prefer mcel_eq to mcel_cmp if either works

* lib/mbscasestr.c (mb_equal, knuth_morris_pratt_multibyte, mbscasestr):
* lib/mbscspn.c (mbscspn):
* lib/mbspbrk.c (mbspbrk):
* lib/mbsspn.c (mbsspn):
* lib/mbsstr.c (mb_equal, knuth_morris_pratt_multibyte, mbsstr):
Prefer mcel_eq to mcel_cmp where either will do.

2 months agomcel: add mcel_eq.
Collin Funk [Thu, 27 Nov 2025 06:32:41 +0000 (22:32 -0800)] 
mcel: add mcel_eq.

* lib/mcel.h (mcel_eq): New function.
* tests/test-mcel.c (main): Add tests.

2 months agoannounce-gen: Accommodate alternative NEWS formats.
Basil L. Contovounesios [Thu, 27 Nov 2025 06:47:57 +0000 (07:47 +0100)] 
announce-gen: Accommodate alternative NEWS formats.

Update ChangeLog.

2 months agoannounce-gen: Accommodate alternative NEWS formats.
Basil L. Contovounesios [Wed, 26 Nov 2025 21:28:04 +0000 (22:28 +0100)] 
announce-gen: Accommodate alternative NEWS formats.

Suggested by Simon Josefsson <simon@josefsson.org> in:
<https://lists.gnu.org/r/bug-gnulib/2025-11/msg00154.html>.

* build-aux/announce-gen (print_news_deltas): Accept Markdown
ATX-style '#' headings in addition to outline-mode '*' headings.
Allow multiple repetitions of the heading marker.

Signed-off-by: Simon Josefsson <simon@josefsson.org>
2 months agomaintainer-makefile: Auto-detect NEWS.md.
Basil L. Contovounesios [Fri, 14 Nov 2025 22:42:10 +0000 (23:42 +0100)] 
maintainer-makefile: Auto-detect NEWS.md.

Suggested by Simon Josefsson <simon@josefsson.org> in:
<https://lists.gnu.org/r/bug-gnulib/2025-11/msg00127.html>.

* top/maint.mk (NEWS_file): Default to NEWS.md when present.
(news-check-regexp, news-check-regexp-prev): Accept headings marked
with either '#' or '*'.
(gl_noteworthy_news_): Default to a #-heading in place of
a *-heading when NEWS_file name implies Markdown.
(release-prep): Consistently prefer test over [.

Signed-off-by: Simon Josefsson <simon@josefsson.org>
2 months agoopenat2: don’t fail with ENOTCAPABLE on FreeBSD
Paul Eggert [Wed, 26 Nov 2025 21:08:34 +0000 (13:08 -0800)] 
openat2: don’t fail with ENOTCAPABLE on FreeBSD

Problem reported by Pavel Cahyna in:
https://lists.gnu.org/r/bug-gnulib/2025-11/msg00257.html
* lib/openat2.c (ENOTCAPABLE): Default to 0.
(do_openat2, openat2): Map FreeBSD’s ENOTCAPABLE to GNU/Linux’s EXDEV.
* tests/test-openat2.c (do_prepare_symlinks, do_test_resolve)
(do-test-basic): Add related tests.

2 months agoautoupdate
Karl Berry [Wed, 26 Nov 2025 15:19:42 +0000 (07:19 -0800)] 
autoupdate

2 months agothreads-h: have mtx_lock join the throng
Paul Eggert [Wed, 26 Nov 2025 05:20:37 +0000 (21:20 -0800)] 
threads-h: have mtx_lock join the throng

* lib/threads.in.h (mtx_lock) [GNULIB_POSIXCHECK]:
Don’t #undef this either; see
<https://lists.gnu.org/r/bug-gnulib/2025-11/msg00254.html>.

2 months agosnippet/warn-on-use: don’t #undef before _GL_WARN_ON_USE
Paul Eggert [Tue, 25 Nov 2025 07:49:27 +0000 (23:49 -0800)] 
snippet/warn-on-use: don’t #undef before _GL_WARN_ON_USE

Don’t #undef X before invoking _GL_WARN_ON_USE or
_GL_WARN_ON_USE_CXX on X.  However, dprintf and mtx_lock are
exceptions, and keep their #undefs at least for now; see
<https://lists.gnu.org/r/bug-gnulib/2025-11/msg00251.html>.

2 months agoannounce-gen: replace SHA1 checksums with SHA3-256.
Collin Funk [Tue, 25 Nov 2025 01:53:15 +0000 (17:53 -0800)] 
announce-gen: replace SHA1 checksums with SHA3-256.

* build-aux/announce-gen (usage): Mention that SHA256 and SHA3-256
checksums are used.
(digest_file_base64_wrap): Add padding lengths for SHA3. Emit the tagged
format expected by cksum.
(print_checksums): Use SHA3-256 instead of SHA1. Update instructions for
checking SHA3-256 checksums. Add instructions for when --cksum-checksums
is not used.

2 months agosnippet/c++defs: Fix typo in comment.
Bruno Haible [Sun, 23 Nov 2025 23:50:05 +0000 (00:50 +0100)] 
snippet/c++defs: Fix typo in comment.

* lib/c++defs.h (_GL_FUNCDECL_SYS_NAME): Fix typo in comment.

2 months agomath-h, string-h: Fix C++ compilation errors with GNULIB_POSIXCHECK.
Bruno Haible [Sun, 23 Nov 2025 23:42:38 +0000 (00:42 +0100)] 
math-h, string-h: Fix C++ compilation errors with GNULIB_POSIXCHECK.

* lib/math.in.h (frexp, ldexp): Use _GL_WARN_ON_USE_CXX instead of
_GL_WARN_ON_USE.
* lib/string.in.h (memchr, strstr): Likewise.

2 months agocrypto/gc: Improve the API of git_hash_clone.
Bruno Haible [Sun, 23 Nov 2025 21:43:54 +0000 (22:43 +0100)] 
crypto/gc: Improve the API of git_hash_clone.

* lib/gc-gnulib.c (gc_hash_clone): Don't set *outhandle when failing.
* lib/gc-libgcrypt.c (gc_hash_clone): Likewise.

2 months agounistr: Replace some 'continue;' statements with if/else.
Bruno Haible [Sun, 23 Nov 2025 21:34:06 +0000 (22:34 +0100)] 
unistr: Replace some 'continue;' statements with if/else.

* lib/unistr/u16-cmp.c (u16_cmp): Use if/else instead of 'continue;'.
* lib/unistr/u16-strcmp.c (u16_strcmp): Likewise.
* lib/unistr/u16-strncmp.c (u16_strncmp): Likewise.
* lib/unistr/u32-cmp.c (u32_cmp): Likewise.
* lib/unistr/u32-strcmp.c (u32_strcmp): Likewise.
* lib/unistr/u32-strncmp.c (u32_strncmp): Likewise.

2 months agocount-leading-zeros: fix 2025-11-18 regression
Paul Eggert [Sun, 23 Nov 2025 11:01:08 +0000 (03:01 -0800)] 
count-leading-zeros: fix 2025-11-18 regression

* lib/count-leading-zeros.h (COUNT_LEADING_ZEROS):
* lib/count-trailing-zeros.h (COUNT_TRAILING_ZEROS):
Go back to putting the decls outside the for-loop,
as the identifiers are used after the loop is over.

2 months agoPort to C23 qualifier-generic fns like strchr
Paul Eggert [Sun, 23 Nov 2025 08:50:40 +0000 (00:50 -0800)] 
Port to C23 qualifier-generic fns like strchr

This ports Gnulib to strict C23 platforms that reject code
like ‘char *q = strchr (P, 'x');’ when P is a pointer to const,
because in C23 strchr is a qualifier-generic function so
strchr (P, 'x') returns char const *.
This patch does not attempt to do the following two things,
which might be useful in the future:
1. When compiling on non-C23 platforms, check user code for
portability to platforms that define qualifier-generic functions.
2. Port Gnulib to platforms that have qualifier-generic functions
not listed in the C23 standard, e.g., strchrnul.  I don’t know
of any such platforms.
* lib/argp-help.c (argp_doc):
* lib/c-strstr.c (c_strstr):
* lib/dfa.c (comsubs):
* lib/mbschr.c (mbschr):
* lib/mbspbrk.c (mbspbrk):
* lib/mbsrchr.c (mbsrchr):
* lib/memchr2.c (memchr2):
* lib/string-desc.c (_sd_index):
* tests/test-bsearch.c (lib_bsearch):
* tests/test-memchr.c (lib_memchr):
* tests/test-wmemchr.c (lib_wmemchr):
Port to C23, where functions like strchr are qualifier-generic.
* lib/c++defs.h (_GL_FUNCDECL_SYS_NAME): New macro.
* lib/c++defs.h (_GL_FUNCDECL_SYS):
* lib/stdlib.in.h (bsearch):
Use it, to prevent C23 names like strchr from acting like macros.
* lib/string.in.h (memchr, strchr, strpbrk, strrchr):
Do not #undef when GNULIB_POSIXCHECK is defined, as this could
cause conforming C23 code to fail to conform.  It’s not clear why
_GL_WARN_ON_USE_CXX; perhaps it was needed but isn’t any more?
But for now, limit the removal of #undef to these four functions
where #undeffing is clearly undesirable in C23.
* lib/wchar.in.h (wmemchr): Parenthesize function name in decl,
to prevent it from acting like a macro.

2 months agostrnlen: Fix compilation error (regression 2025-11-18).
Bruno Haible [Fri, 21 Nov 2025 02:02:22 +0000 (03:02 +0100)] 
strnlen: Fix compilation error (regression 2025-11-18).

Reported by Po Lu <luangruo@yahoo.com> in
<https://lists.gnu.org/archive/html/bug-gnulib/2025-11/msg00217.html>.

* lib/strnlen.c (strnlen): Revert last change.

2 months agonstrftime, fprintftime: Reduce link requirements on macOS.
Bruno Haible [Thu, 20 Nov 2025 02:04:39 +0000 (03:04 +0100)] 
nstrftime, fprintftime: Reduce link requirements on macOS.

Reported by Paul Eggert for GNU tar.

* lib/strftime.c: On macOS, don't include localename.h.
(my_strftime): On macOS, use strftime() instead of gl_locale_name_unsafe
to test for the three particular locales.
* modules/nstrftime (Depends-on): Add condition to localename-unsafe.
(Link): Remove @INTL_MACOSX_LIBS@.
* modules/nstrftime-limited (Depends-on): Add condition to
localename-unsafe-limited.
(Link): Remove @INTL_MACOSX_LIBS@.
* modules/nstrftime-tests (Makefile.am): Link test-nstrftime* without
@INTL_MACOSX_LIBS@.
* modules/fprintftime (Link): Remove @INTL_MACOSX_LIBS@.

2 months agowcsdup: Make POSIX compliant.
Bruno Haible [Wed, 19 Nov 2025 11:05:00 +0000 (12:05 +0100)] 
wcsdup: Make POSIX compliant.

* lib/wcsdup.c: Include <errno.h>.
* lib/wcsdup-impl.h (wcsdup): Set errno before returning NULL.

2 months agointprops: port better to Clang < 21
Paul Eggert [Wed, 19 Nov 2025 00:13:39 +0000 (16:13 -0800)] 
intprops: port better to Clang < 21

Clang bug 16778 (formerly 16404) apparently survived on some
platforms even in Clang 14 and later.  The bug appears to be fixed
in Clang 21.  Work around the bug on older platforms.
Also, update some URLs as Clang renumbered its bugs.
* lib/intprops-internal.h (_GL_HAS_BUILTIN_MUL_OVERFLOW):
Define to 0 (not 1) for Clang 14 through 20.

2 months agolib: Replace some 'continue;' statements with if/else.
Bruno Haible [Tue, 18 Nov 2025 22:59:58 +0000 (23:59 +0100)] 
lib: Replace some 'continue;' statements with if/else.

* lib/base32.c (base32_decode_ctx): Use if/else instead of 'continue;'.
* lib/base64.c (base64_decode_ctx): Likewise.
* lib/bitset/array.c (abitset_list): Likewise.
* lib/bitset/list.c (lbitset_disjoint_p): Likewise.
* lib/bitset/table.c (tbitset_equal_p, tbitset_list, tbitset_subset_p,
tbitset_disjoint_p, tbitset_op3_cmp): Likewise.
* lib/bitset/vector.c (vbitset_list): Likewise.
* lib/diffseq.h (diag): Likewise.
* lib/file-has-acl.c (fdfile_has_aclinfo): Likewise.
* lib/fwriteerror.c (main): Likewise.
* lib/getugroups.c (getugroups): Likewise.
* lib/hash.c (transfer_entries): Likewise.
* lib/inet_pton.c (inet_pton6): Likewise.
* lib/mountlist.c (read_file_system_list): Likewise.
* lib/poll.c (poll): Likewise.
* lib/select.c (rpl_select): Likewise.
* lib/set-permissions.c (set_acls_from_mode): Likewise.
* lib/timevar.c (timevar_print): Likewise.
* lib/wcscasecmp-impl.h (wcscasecmp): Likewise.
* lib/wcscmp-impl.h (wcscmp): Likewise.
* lib/wcsncasecmp-impl.h (wcsncasecmp): Likewise.
* lib/wcsncmp-impl.h (wcsncmp): Likewise.
* lib/wmemcmp-impl.h (wmemcmp): Likewise.

2 months agolib: Use C99 initialization syntax for single-variable 'for' loops.
Bruno Haible [Tue, 18 Nov 2025 20:52:13 +0000 (21:52 +0100)] 
lib: Use C99 initialization syntax for single-variable 'for' loops.

* lib/acl-internal.c (acl_nontrivial, acl_ace_nontrivial,
aclv_nontrivial, acl_nfs4_nontrivial): Declare variable of
single-variable 'for' loops in the 'for' clause.
* lib/arcfour.c (arcfour_setkey): Likewise.
* lib/arctwo.c (arctwo_encrypt, arctwo_decrypt, arctwo_setkey_ekb):
Likewise.
* lib/argmatch.c (argmatch, argmatch_exact, argmatch_valid,
argmatch_to_argument): Likewise.
* lib/argz.c (argz_create): Likewise.
* lib/argz.in.h (error_t): Likewise.
* lib/basename-lgpl.c (last_component): Likewise.
* lib/bcp47.c (xpg_to_bcp47, bcp47_to_xpg): Likewise.
* lib/bitset/list.c (lbitset_empty_p): Likewise.
* lib/bitset/vector.c (vbitset_or_and_cmp): Likewise.
* lib/classpath.c (new_classpath): Likewise.
* lib/clean-temp-simple.c (cleanup_action): Likewise.
* lib/clean-temp.c (create_temp_dir, cleanup_temp_dir): Likewise.
* lib/count-leading-zeros.h (COUNT_LEADING_ZEROS): Likewise.
* lib/count-one-bits.h (COUNT_ONE_BITS_GENERIC): Likewise.
* lib/count-trailing-zeros.h (COUNT_TRAILING_ZEROS): Likewise.
* lib/crc-generate-table.c (make_crc_table): Likewise.
* lib/crc.c (crc32_update_no_xor_slice_by_n, crc32_update_no_xor):
Likewise.
* lib/csharpcomp.c (compile_csharp_using_mono,
compile_csharp_using_dotnet, compile_csharp_using_sscli): Likewise.
* lib/csharpexec.c (execute_csharp_using_mono,
execute_csharp_using_dotnet, execute_csharp_using_sscli): Likewise.
* lib/cygpath.c (cygpath_w): Likewise.
* lib/des.c (gl_des_is_weak_key, des_key_schedule, gl_des_setkey,
gl_3des_set2keys, gl_3des_set3keys): Likewise.
* lib/dfa.c (state_index, transit_state, free_mbdata): Likewise.
* lib/di-set.c (di_ent_hash): Likewise.
* lib/diffseq.h (diag): Likewise.
* lib/duplocale.c (duplocale): Likewise.
* lib/execve.c (execve): Likewise.
* lib/fatal-signal.c (init_fatal_signals, uninstall_handlers,
install_handlers, gl_lock_define_initialized, do_init_fatal_signal_set,
get_fatal_signals): Likewise.
* lib/fcntl.c (dupfd): Likewise.
* lib/ffs.c (ffs): Likewise.
* lib/ffsl.h (unsigned): Likewise.
* lib/file-remote.c (file_is_remote): Likewise.
* lib/findprog-in.c (find_in_given_path): Likewise.
* lib/findprog.c (find_in_path): Likewise.
* lib/fma.c (decode, multiply, FUNC): Likewise.
* lib/freelocale.c (freelocale): Likewise.
* lib/fstrcmp.c (fstrcmp_bounded): Likewise.
* lib/ftoastr.c (FTOASTR): Likewise.
* lib/fts.c (find_matching_ancestor, fts_cross_check): Likewise.
* lib/fwriteerror.c (main): Likewise.
* lib/gai_strerror.c (gai_strerror): Likewise.
* lib/gc-gnulib.c (gc_cipher_setkey, gc_cipher_setiv,
gc_cipher_encrypt_inline, gc_cipher_decrypt_inline): Likewise.
* lib/gc-pbkdf2.c (gc_pbkdf2_prf): Likewise.
* lib/gen-uni-tables.c (fill_attributes, debug_output_predicate,
output_predicate_test, output_predicate, output_category,
output_combclass, output_bidi_category, output_decimal_digit_test,
output_decimal_digit, output_digit_test, output_digit,
output_numeric_test, output_numeric, fill_mirror, get_mirror_value,
output_mirror, clear_properties, fill_properties, fill_property30,
output_indic_conjunct_break_test, output_indic_conjunct_break,
fill_arabicshaping, output_joining_type_test, output_joining_type,
output_joining_group_test, output_joining_group, fill_scripts,
output_scripts, output_scripts_byname, output_blocks,
output_ident_category, output_charclass, output_charmap, output_tables,
fill_width, output_nonspacing_property, output_width_property_test,
debug_output_lbp, fill_org_lbp, debug_output_org_lbp, output_lbpea,
output_lbrk_tables, debug_output_wbp, fill_org_wbp,
debug_output_org_wbp, output_wbp, output_gbp_test, output_gbp_table,
fill_org_gbp, output_decomposition, output_decomposition_tables,
fill_composition_exclusions, debug_output_composition_tables,
output_composition_tables, output_simple_mapping_test,
output_simple_mapping, fill_casing_rules, fill_casefolding_rules,
redistribute_casefolding_rules, output_casing_rules): Likewise.
* lib/get_ppid_of.c (get_ppid_of): Likewise.
* lib/getdtablesize.c (getdtablesize): Likewise.
* lib/getloadavg.c (getloadavg): Likewise.
* lib/getlocalename_l-unsafe.c (get_locale_t_name_unsafe, newlocale,
duplocale, freelocale): Likewise.
* lib/getlogin.c (getlogin): Likewise.
* lib/getprogname.c (getprogname): Likewise.
* lib/getugroups.c (getugroups): Likewise.
* lib/gl_anyavltree_list2.h (gl_tree_remove_node_from_tree,
gl_tree_nx_add_first, gl_tree_nx_add_last, gl_tree_nx_add_before,
gl_tree_nx_add_after): Likewise.
* lib/gl_anyhash2.h (hash_resize): Likewise.
* lib/gl_anyhash_primes.h (next_prime): Likewise.
* lib/gl_anylinked_list2.h (gl_linked_nx_create,
gl_linked_search_from_to, gl_linked_list_free,
gl_linked_iterator_from_to, gl_linked_sortedlist_search,
gl_linked_sortedlist_nx_add, gl_linked_sortedlist_remove): Likewise.
* lib/gl_anyrbtree_list2.h (gl_tree_remove_node_from_tree,
gl_tree_nx_add_first, gl_tree_nx_add_last, gl_tree_nx_add_before,
gl_tree_nx_add_after): Likewise.
* lib/gl_anytree_list2.h (gl_tree_sortedlist_search,
gl_tree_sortedlist_search_from_to): Likewise.
* lib/gl_anytree_omap.h (gl_tree_search, gl_tree_search_atleast,
gl_tree_getremove): Likewise.
* lib/gl_anytree_oset.h (gl_tree_search, gl_tree_search_atleast,
gl_tree_search_node, gl_tree_iterator_atleast): Likewise.
* lib/gl_anytreehash_list1.h (add_to_bucket, remove_from_bucket):
Likewise.
* lib/gl_anytreehash_list2.h (gl_tree_search_from_to,
gl_tree_list_free): Likewise.
* lib/gl_array_list.c (gl_array_indexof_from_to, gl_array_nx_add_first,
gl_array_nx_add_before, gl_array_nx_add_after, gl_array_nx_add_at,
gl_array_remove_node, gl_array_remove_at): Likewise.
* lib/gl_array_map.c (gl_array_indexof, gl_array_remove_at): Likewise.
* lib/gl_array_omap.c (gl_array_nx_add_at, gl_array_remove_at):
Likewise.
* lib/gl_array_oset.c (gl_array_nx_add_at, gl_array_remove_at,
gl_array_update): Likewise.
* lib/gl_array_set.c (gl_array_search, gl_array_remove_at,
gl_array_remove): Likewise.
* lib/gl_carray_list.c (gl_carray_nx_add_at, gl_carray_remove_at,
gl_carray_list_free): Likewise.
* lib/gl_hash_map.c (gl_hash_search, gl_hash_nx_getput,
gl_hash_getremove, gl_hash_free): Likewise.
* lib/gl_hash_set.c (gl_hash_search, gl_hash_nx_add, gl_hash_remove,
gl_hash_free): Likewise.
* lib/gl_linkedhash_list.c (remove_from_bucket): Likewise.
* lib/gl_linkedhash_map.c (gl_linkedhash_search,
gl_linkedhash_nx_getput, gl_linkedhash_getremove, gl_linkedhash_free):
Likewise.
* lib/gl_linkedhash_set.c (gl_linkedhash_search, gl_linkedhash_nx_add,
gl_linkedhash_remove, gl_linkedhash_free): Likewise.
* lib/group-member.c (group_member, main): Likewise.
* lib/hash.c (hash_get_max_bucket_length, hash_table_ok, hash_lookup,
hash_get_first, hash_get_entries, hash_do_for_each, hash_clear,
hash_free, find_entry, transfer_entries, hash_print): Likewise.
* lib/hashcode-mem.c (hash_pjw_bare): Likewise.
* lib/hashcode-string2.c (hash_pjw): Likewise.
* lib/human.c (human_readable): Likewise.
* lib/i-ring.c (i_ring_init): Likewise.
* lib/idcache.c (getuser, getuidbyname, getgroup, getgidbyname):
Likewise.
* lib/inet_ntop.c (inet_ntop6): Likewise.
* lib/inet_pton.c (inet_pton6): Likewise.
* lib/ino-map.c (ino_hash): Likewise.
* lib/integer_length.c (integer_length): Likewise.
* lib/integer_length_l.c (FUNC): Likewise.
* lib/javacomp.c (compile_using_envjavac, compile_using_javac):
Likewise.
* lib/javaexec.c (execute_java_class): Likewise.
* lib/kwset.c (kwsprep): Likewise.
* lib/ldexpl.c (main): Likewise.
* lib/localeinfo.c (case_folded_counterparts): Likewise.
* lib/localename-unsafe.c (script_entry, gl_locale_name_canonicalize):
Likewise.
* lib/login_tty.c (login_tty): Likewise.
* lib/mbscasestr.c (knuth_morris_pratt_multibyte): Likewise.
* lib/mbsstr.c (knuth_morris_pratt_multibyte): Likewise.
* lib/md2.c (md2_finish_ctx, md2_update_chksum, md2_compress): Likewise.
* lib/md4.c (md4_process_block): Likewise.
* lib/mem-hash-map.c (resize): Likewise.
* lib/memcasecmp.c (memcasecmp): Likewise.
* lib/memchr.c (__memchr): Likewise.
* lib/memchr2.c (memchr2): Likewise.
* lib/memrchr.c (__memrchr): Likewise.
* lib/mgetgroups.c (mgetgroups): Likewise.
* lib/mktime.c (__mktime_internal): Likewise.
* lib/modechange.c (mode_compile): Likewise.
* lib/mountlist.c (unescape_tab, read_file_system_list): Likewise.
* lib/mpsort.c (mpsort_with_tmp): Likewise.
* lib/nproc.c (num_processors_via_affinity_mask): Likewise.
* lib/obstack.c (strong_alias): Likewise.
* lib/os2-spawn.c (prepare_spawn): Likewise.
* lib/pipe-filter-ii.c (WaitForMultipleObjects): Likewise.
* lib/pipe-safer.c (pipe_safer): Likewise.
* lib/pipe2-safer.c (pipe2_safer): Likewise.
* lib/poll.c (windows_compute_revents, poll): Likewise.
* lib/progreloc.c (find_executable): Likewise.
* lib/pselect.c (rpl_pselect): Likewise.
* lib/putenv.c (SetEnvironmentVariable): Likewise.
* lib/qsort.c (_quicksort): Likewise.
* lib/quotearg.c (quotearg_buffer_restyled, quotearg_free): Likewise.
* lib/random_r.c (__srandom_r): Likewise.
* lib/readtokens.c (readtoken): Likewise.
* lib/readutmp.c (read_utmp_from_systemd): Likewise.
* lib/regex-quote.c (regex_quote_length, regex_quote_copy): Likewise.
* lib/relocwrapper.c (relocate_libdirs, activate_libdirs): Likewise.
* lib/scandir.c (cancel_handler): Likewise.
* lib/select.c (windows_poll_handle, rpl_select): Likewise.
* lib/set-permissions.c (set_acls_from_mode): Likewise.
* lib/setlocale-fixes.c (fill_lc_all_name, setlocale_fixed): Likewise.
* lib/setlocale.c (search, setlocale_unixlike): Likewise.
* lib/setlocale_null-unlocked.c (setlocale_null_r_unlocked): Likewise.
* lib/sh-quote.c (shell_quote_argv): Likewise.
* lib/sha1.c (sha1_process_block): Likewise.
* lib/sha256.c (sha256_read_ctx, sha224_read_ctx, sha256_process_block):
Likewise.
* lib/sha512.c (sha512_read_ctx, sha384_read_ctx, sha512_process_block):
Likewise.
* lib/sig2str.c (str2signum, sig2str): Likewise.
* lib/sigprocmask.c (sigpending, sigprocmask): Likewise.
* lib/sm3.c (sm3_read_ctx, sm3_process_block): Likewise.
* lib/spawn_faction_destroy.c (posix_spawn_file_actions_destroy):
Likewise.
* lib/spawni.c (do_remaining_delayed_dup2, shrink_inheritable_handles,
close_inheritable_handles, __spawni): Likewise.
* lib/ssfmalloc-bitmap.h (init_bitmap_all_bits_clear,
init_bitmap_all_bits_set): Likewise.
* lib/ssfmalloc.h (add_update, drop_update,
allocate_medium_block_in_page, free_medium_block_in_page): Likewise.
* lib/stack-trace-impl.h (print_stack_trace_to): Likewise.
* lib/stat-time.h (stat_time_normalize): Likewise.
* lib/stat-w32.c (_gl_fstat_by_handle): Likewise.
* lib/stat.c (rpl_stat): Likewise.
* lib/stdopen.c (stdopen): Likewise.
* lib/str-kmp.h (knuth_morris_pratt): Likewise.
* lib/str-two-way.h (two_way_long_needle): Likewise.
* lib/strchrnul.c (strchrnul): Likewise.
* lib/strfmon_l.c (rpl_strfmon_l): Likewise.
* lib/strftime.c (underlying_strftime, __strftime_internal): Likewise.
* lib/striconveh.c (iconv_carefully, iconv_carefully_1, tmpbuf):
Likewise.
* lib/striconveha.c (mem_iconveha_notranslit, str_iconveha_notranslit):
Likewise.
* lib/string-desc.c (_sd_c_casecmp, sd_concat): Likewise.
* lib/strnlen.c (strnlen): Likewise.
* lib/strtod.c (parse_number): Likewise.
* lib/strtol.c (INTERNAL(strtol)): Likewise.
* lib/struniq.h (gl_lock_define_initialized): Likewise.
* lib/sys_select.in.h (rpl_fd_isset): Likewise.
* lib/sys_socket.in.h (rpl_fd_isset): Likewise.
* lib/system-quote.c (windows_createprocess_quote, windows_cmd_quote,
system_quote_argv): Likewise.
* lib/tempname.c (try_tempname_len): Likewise.
* lib/term-style-control.c (init_relevant_signal_set,
fatal_or_stopping_signal_handler, continuing_signal_handler,
ensure_other_signal_handlers): Likewise.
* lib/tsearch.c (check_tree): Likewise.
* lib/unicase/u-casemap.h (FUNC): Likewise.
* lib/unicase/u-ct-totitle.h (FUNC): Likewise.
* lib/uniconv/u-conv-from-enc.h (FUNC): Likewise.
* lib/uniconv/u-conv-to-enc.h (FUNC): Likewise.
* lib/uniconv/u8-conv-from-enc.c (u8_conv_from_encoding): Likewise.
* lib/unictype/3level.h (CONCAT(TABLE,_add), CONCAT(TABLE,_iterate),
CONCAT(TABLE,_finalize)): Likewise.
* lib/unictype/3levelbit.h (CONCAT(TABLE,_add), CONCAT(TABLE,_iterate),
CONCAT(TABLE,_finalize)): Likewise.
* lib/unigbrk/ulc-grapheme-breaks.c (ascii_grapheme_breaks,
ulc_grapheme_breaks): Likewise.
* lib/unilbrk/u8-possible-linebreaks.c (main): Likewise.
* lib/unilbrk/u8-width-linebreaks.c (main): Likewise.
* lib/unilbrk/ulc-possible-linebreaks.c
(ulc_possible_linebreaks_internal, main): Likewise.
* lib/unilbrk/ulc-width-linebreaks.c (ulc_width_linebreaks_internal,
main): Likewise.
* lib/uniname/uniname.c (unicode_character_name,
unicode_name_character): Likewise.
* lib/uninorm/u-normalize-internal.h (FUNC): Likewise.
* lib/uninorm/uninorm-filter.c (uninorm_filter_write,
uninorm_filter_flush): Likewise.
* lib/uniwbrk/u8-wordbreaks.c (main): Likewise.
* lib/uniwbrk/ulc-wordbreaks.c (ulc_wordbreaks, main): Likewise.
* lib/userspec.c (main): Likewise.
* lib/vasnprintf.c (multiply, divide, convert_to_decimal,
decode_long_double, decode_double, scale10_round_decimal_decoded,
VASNPRINTF): Likewise.
* lib/vma-iter.c (vma_iterate): Likewise.
* lib/windows-cond.c (glwthread_waitqueue_notify_all): Likewise.
* lib/windows-path.c (extended_PATH, extended_environ): Likewise.
* lib/windows-rwlock.c (glwthread_waitqueue_add,
glwthread_waitqueue_notify_all): Likewise.
* lib/windows-spawn.c (quoted_arg_length, quoted_arg_string,
prepare_spawn, compose_command, compose_envblock,
init_inheritable_handles, compose_handles_block): Likewise.
* lib/windows-timedrwlock.c (glwthread_waitqueue_notify_all): Likewise.
* lib/windows-tls.c (glwthread_tls_process_destructors,
glwthread_tls_key_delete): Likewise.
* lib/xstring-desc.c (xsd_concat): Likewise.
* lib/xvasprintf.c (xstrcat, xvasprintf): Likewise.
* lib/newlocale.c (newlocale): Likewise. Move the fail_with_err label
into the loop.

2 months agonstrftime, fprintftime: Fix a -Wshadow=local warning (regr. 2024-02-08).
Bruno Haible [Tue, 18 Nov 2025 10:43:55 +0000 (11:43 +0100)] 
nstrftime, fprintftime: Fix a -Wshadow=local warning (regr. 2024-02-08).

* lib/strftime.c (__strftime_internal): Rename a local variable.

2 months agohash: Add a comment.
Bruno Haible [Tue, 18 Nov 2025 01:18:54 +0000 (02:18 +0100)] 
hash: Add a comment.

* lib/hash.c (struct hash_entry): Add comment about an invariant.

2 months agoopenat2: follow OS re EFTYPE/EMLINK/ELOOP
Paul Eggert [Tue, 18 Nov 2025 00:28:24 +0000 (16:28 -0800)] 
openat2: follow OS re EFTYPE/EMLINK/ELOOP

On FreeBSD and NetBSD, have openat2 behave like openat
with respect to whether O_NOFOLLOW fails with EMLINK and EFTYPE
when opening a symlink.  Although these openat implementations
do not conform to POSIX, their behavior is arguably more useful
than the POSIX behavior so let’s have openat2 be consistent with
openat rather than matching the GNU/Linux behavior.
This should fix a test failure reported by Bruno Haible in:
https://lists.gnu.org/r/bug-gnulib/2025-11/msg00183.html
* lib/fcntl.in.h (_GL_OPENAT_ESYMLINK): New macro.
* lib/openat2.c (do_openat2): Use it instead of ELOOP.
* tests/test-openat2.c (is_nofollow_error):
Use it; this makes the tests pickier on FreeBSD and NetBSD,
as they now require local behavior.

2 months agoreadutmp, boot-time tests: Fix test failure in CentOS 7 CI environments.
Bruno Haible [Mon, 17 Nov 2025 21:29:16 +0000 (22:29 +0100)] 
readutmp, boot-time tests: Fix test failure in CentOS 7 CI environments.

* tests/test-boot-time.c: Include <stdlib.h>.
(main): Skip the 5-years test in environments where $USER is not set.
* tests/test-readutmp.c (main): Likewise.

2 months agomaintainer-makefile: Optimize repeated executions of the same command.
Basil L. Contovounesios [Fri, 14 Nov 2025 22:38:38 +0000 (23:38 +0100)] 
maintainer-makefile: Optimize repeated executions of the same command.

* top/maint.mk (gnulib_dir): Define as a simply (rather than
recursively) expanded variable, to avoid repeated $(shell)
invocations.

2 months agoannounce-gen: Pacify POD errors.
Basil L. Contovounesios [Fri, 14 Nov 2025 18:10:11 +0000 (19:10 +0100)] 
announce-gen: Pacify POD errors.

* build-aux/announce-gen: Wrap all =items within =over..=back.
Terminate all C< formatting codes with >, not EOL.
(sizes): Format assignment operator like surrounding code.
(print_locations): Add missing C formatting code.

2 months agotests: Use C99 initialization syntax for single-variable 'for' loops.
Bruno Haible [Sun, 16 Nov 2025 14:05:22 +0000 (15:05 +0100)] 
tests: Use C99 initialization syntax for single-variable 'for' loops.

* tests/altstack-util.h (check_alternate_stack_no_overflow): Declare
variable of single-variable 'for' loops in the 'for' clause.
* tests/atomic-int-gnulib.h (init_atomic_int): Likewise.
* tests/atomic-int-isoc.h (init_atomic_int): Likewise.
* tests/atomic-int-posix.h (init_atomic_int): Likewise.
* tests/bench-crc.c (main): Likewise.
* tests/bench-digest.h (main): Likewise.
* tests/bench-mbiter.c (do_test, main): Likewise.
* tests/bench-mbiterf.c (do_test, main): Likewise.
* tests/bench-mbswidth.c (do_test, main): Likewise.
* tests/bench-mbuiter.c (do_test, main): Likewise.
* tests/bench-mbuiterf.c (do_test, main): Likewise.
* tests/bench-mcel.c (noop_test, main): Likewise.
* tests/bench-pagealign_alloc.c (allocate_some_pages, main): Likewise.
* tests/bench-totalorder.c (do_float_test, do_double_test,
do_long_double_test, main): Likewise.
* tests/test-access.h (is_administrator): Likewise.
* tests/test-aligned-malloc.c (main): Likewise.
* tests/test-aligned_alloc.c (main): Likewise.
* tests/test-alloca-opt.c (main): Likewise.
* tests/test-arcfour.c (main): Likewise.
* tests/test-arctwo.c (main): Likewise.
* tests/test-argp.c (parse_opt, main): Likewise.
* tests/test-argv-iter.c (main): Likewise.
* tests/test-array-mergesort.c (main): Likewise.
* tests/test-array_list.c (check_equals, main): Likewise.
* tests/test-array_map.c (check_equals, main): Likewise.
* tests/test-array_omap.c (check_equals, main): Likewise.
* tests/test-array_oset.c (check_equals, gl_sortedlist_indexof_atleast,
main): Likewise.
* tests/test-array_set.c (check_equals, main): Likewise.
* tests/test-asyncsafe-linked_list-strong.c (sigint_handler,
signal_sending_thread, main): Likewise.
* tests/test-asyncsafe-linked_list-weak.c (init_bag_empty, bag_is_empty,
bag_is_subset, bag_equals, bag_or, bag_xor, bag_and_not, sigint_handler,
signal_sending_thread, main): Likewise.
* tests/test-asyncsafe-spin1.c (main): Likewise.
* tests/test-asyncsafe-spin2.c (check_accounts, lock_mutator_thread,
test_asyncsafe_spin): Likewise.
* tests/test-at-init-2.c (init_squares): Likewise.
* tests/test-at-init-3.c (init_cubes): Likewise.
* tests/test-avltree_list.c (check_equals, main): Likewise.
* tests/test-avltree_omap.c (check_equals, main): Likewise.
* tests/test-avltree_oset.c (check_equals, main): Likewise.
* tests/test-avltreehash_list.c (check_equals, main): Likewise.
* tests/test-btoc32.c (main): Likewise.
* tests/test-btowc.c (main): Likewise.
* tests/test-c-ctype.c (test_agree_with_C_locale, test_all): Likewise.
* tests/test-c-strcasestr.c (main): Likewise.
* tests/test-c-strstr.c (main): Likewise.
* tests/test-c32isalnum.c (main): Likewise.
* tests/test-c32isalpha.c (main): Likewise.
* tests/test-c32isblank.c (main): Likewise.
* tests/test-c32iscntrl.c (main): Likewise.
* tests/test-c32isdigit.c (main): Likewise.
* tests/test-c32isgraph.c (main): Likewise.
* tests/test-c32islower.c (main): Likewise.
* tests/test-c32isprint.c (main): Likewise.
* tests/test-c32ispunct.c (main): Likewise.
* tests/test-c32isspace.c (main): Likewise.
* tests/test-c32isupper.c (main): Likewise.
* tests/test-c32isxdigit.c (main): Likewise.
* tests/test-c32rtomb.c (main): Likewise.
* tests/test-c32rtomb-w32.c (test_one_locale, main): Likewise.
* tests/test-c32snrtombs.c (main): Likewise.
* tests/test-c32srtombs.c (main): Likewise.
* tests/test-c32stombs.c (main): Likewise.
* tests/test-c32tolower.c (main): Likewise.
* tests/test-c32toupper.c (main): Likewise.
* tests/test-c32width.c (main): Likewise.
* tests/test-call_once2.c (once_contender_thread, test_once): Likewise.
* tests/test-carray_list.c (check_equals, main): Likewise.
* tests/test-cbrt.h (test_function): Likewise.
* tests/test-ceil2.c (main): Likewise.
* tests/test-ceilf2.c (main): Likewise.
* tests/test-count-leading-zeros.c (TEST_COUNT_LEADING_ZEROS): Likewise.
* tests/test-count-one-bits.c (TEST_COUNT_ONE_BITS): Likewise.
* tests/test-count-trailing-zeros.c (TEST_COUNT_TRAILING_ZEROS):
Likewise.
* tests/test-crc.c (main): Likewise.
* tests/test-des.c (main, cipher): Likewise.
* tests/test-di-set.c (main): Likewise.
* tests/test-digest.h (test_digest_on_files): Likewise.
* tests/test-dirent-safer.c (main): Likewise.
* tests/test-dirname.c (main): Likewise.
* tests/test-dprintf-posix2.c (main): Likewise.
* tests/test-dup-safer.c (main): Likewise.
* tests/test-dup3.c (main): Likewise.
* tests/test-dynarray.c (main): Likewise.
* tests/test-exec-child.c (main): Likewise.
* tests/test-execle-main.c (get_environ_assignment): Likewise.
* tests/test-execute-child.c (main): Likewise.
* tests/test-execute-main.c (main): Likewise.
* tests/test-execute-script.c (main): Likewise.
* tests/test-execve-main.c (get_environ_assignment): Likewise.
* tests/test-execvpe-main.c (get_environ_assignment): Likewise.
* tests/test-exp.h (test_function): Likewise.
* tests/test-exp2.h (test_function): Likewise.
* tests/test-explicit_bzero.c (test_stack): Likewise.
* tests/test-expm1.h (test_function): Likewise.
* tests/test-fabs.h (test_function): Likewise.
* tests/test-fchdir.c (main): Likewise.
* tests/test-fdatasync.c (main): Likewise.
* tests/test-fdopen.c (COUNT): Likewise.
* tests/test-fenv-except-trapping-1.c (main): Likewise.
* tests/test-ffs.c (naive, main): Likewise.
* tests/test-ffsl.c (naive, main): Likewise.
* tests/test-ffsll.c (naive, main): Likewise.
* tests/test-filemode.c (main): Likewise.
* tests/test-filenamecat.c (main): Likewise.
* tests/test-filevercmp.c (main): Likewise.
* tests/test-float-h.c (test_float, test_double, test_long_double):
Likewise.
* tests/test-floor2.c (main): Likewise.
* tests/test-floorf2.c (main): Likewise.
* tests/test-fma2.h (test_function): Likewise.
* tests/test-fmod.h (test_function): Likewise.
* tests/test-fnmatch-w32.c (main): Likewise.
* tests/test-fprintf-posix3.c (main): Likewise.
* tests/test-fpurge.c (main): Likewise.
* tests/test-free.c (N, __has_feature): Likewise.
* tests/test-frexp.h (test_function): Likewise.
* tests/test-fsync.c (main): Likewise.
* tests/test-fts.c (needles, main): Likewise.
* tests/test-gc-arcfour.c (main): Likewise.
* tests/test-gc-arctwo.c (main): Likewise.
* tests/test-gc-des.c (main): Likewise.
* tests/test-gc-hmac-md5.c (main): Likewise.
* tests/test-gc-hmac-sha1.c (main): Likewise.
* tests/test-gc-hmac-sha256.c (main): Likewise.
* tests/test-gc-hmac-sha512.c (main): Likewise.
* tests/test-gc-md2.c (main): Likewise.
* tests/test-gc-md4.c (main): Likewise.
* tests/test-gc-md5.c (main): Likewise.
* tests/test-gc-pbkdf2.c (main): Likewise.
* tests/test-gc-pbkdf2-sha1.c (main): Likewise.
* tests/test-gc-rijndael.c (main): Likewise.
* tests/test-gc-sha1.c (main): Likewise.
* tests/test-gc-sha256.c (main): Likewise.
* tests/test-gc-sha512.c (main): Likewise.
* tests/test-gc-sm3.c (main): Likewise.
* tests/test-getaddrinfo.c (simple): Likewise.
* tests/test-getcwd.c (test_long_name): Likewise.
* tests/test-getgroups.c (main): Likewise.
* tests/test-getlogin_r.c (main): Likewise.
* tests/test-getndelim2.c (main): Likewise.
* tests/test-getopt.h (test_getopt): Likewise.
* tests/test-getopt_long.h (test_getopt_long, test_getopt_long_posix):
Likewise.
* tests/test-getrusage.c (main): Likewise.
* tests/test-getusershell.c (second_pass): Likewise.
* tests/test-hash.c (main): Likewise.
* tests/test-hash_map.c (check_equals, main): Likewise.
* tests/test-hash_set.c (check_equals, string_hashcode, main): Likewise.
* tests/test-hmac-md5.c (hmac_check): Likewise.
* tests/test-hmac-sha1.c (hmac_check): Likewise.
* tests/test-hmac-sha256.c (hmac_check): Likewise.
* tests/test-hmac-sha512.c (hmac_check): Likewise.
* tests/test-hypot.h (test_function): Likewise.
* tests/test-idpriv-drop.c (main): Likewise.
* tests/test-idpriv-droptemp.c (main): Likewise.
* tests/test-ieee754-h.c (main): Likewise.
* tests/test-ilogb.h (test_function): Likewise.
* tests/test-ino-map.c (INO_MAP_INIT): Likewise.
* tests/test-integer_length.c (naive, main): Likewise.
* tests/test-integer_length_l.c (naive, main): Likewise.
* tests/test-integer_length_ll.c (naive, main): Likewise.
* tests/test-isalnum_l.c (test_single_locale_common): Likewise.
* tests/test-isalpha_l.c (test_single_locale_common): Likewise.
* tests/test-isblank.c (main): Likewise.
* tests/test-isblank_l.c (test_single_locale_common): Likewise.
* tests/test-iscntrl_l.c (test_single_locale_common): Likewise.
* tests/test-isdigit_l.c (test_single_locale_common): Likewise.
* tests/test-isgraph_l.c (test_single_locale_common): Likewise.
* tests/test-islower_l.c (test_single_locale_common): Likewise.
* tests/test-isprint_l.c (test_single_locale_common): Likewise.
* tests/test-ispunct_l.c (test_single_locale_common): Likewise.
* tests/test-isspace_l.c (test_single_locale_common): Likewise.
* tests/test-isupper_l.c (test_single_locale_common): Likewise.
* tests/test-iswdigit.c (main): Likewise.
* tests/test-iswpunct.c (main): Likewise.
* tests/test-iswxdigit.c (main): Likewise.
* tests/test-isxdigit_l.c (test_single_locale_common): Likewise.
* tests/test-ldexp.h (test_function): Likewise.
* tests/test-ldexp-ieee.h (test_function): Likewise.
* tests/test-libtextstyle.c (main): Likewise.
* tests/test-linkat.c (main): Likewise.
* tests/test-linked_list.c (check_equals, main): Likewise.
* tests/test-linkedhash_list.c (check_equals, main): Likewise.
* tests/test-linkedhash_map.c (check_equals, main): Likewise.
* tests/test-linkedhash_set.c (check_equals, string_hashcode, main):
Likewise.
* tests/test-localename.c (test_locale_name, test_locale_name_thread):
Likewise.
* tests/test-lock.c (check_accounts, gl_lock_define_initialized,
test_lock, gl_rwlock_define_initialized, test_rwlock,
reclock_mutator_thread, test_recursive_lock, once_contender_thread,
test_once): Likewise.
* tests/test-log.h (test_function): Likewise.
* tests/test-log10.h (test_function): Likewise.
* tests/test-log1p.h (test_function): Likewise.
* tests/test-log2.h (test_function): Likewise.
* tests/test-logb.h (test_function): Likewise.
* tests/test-login_tty.c (main): Likewise.
* tests/test-malloca.c (main): Likewise.
* tests/test-mbrlen.c (main): Likewise.
* tests/test-mbrlen-w32.c (test_one_locale, main): Likewise.
* tests/test-mbrtoc16.c (main): Likewise.
* tests/test-mbrtoc16-w32.c (test_one_locale, main): Likewise.
* tests/test-mbrtoc32.c (main): Likewise.
* tests/test-mbrtoc32-w32.c (test_one_locale, main): Likewise.
* tests/test-mbrtowc.c (main): Likewise.
* tests/test-mbrtowc-w32.c (test_one_locale, main): Likewise.
* tests/test-mbsnrtoc32s.c (main): Likewise.
* tests/test-mbsnrtowcs.c (main): Likewise.
* tests/test-mbsrtoc32s.c (main): Likewise.
* tests/test-mbsrtowcs.c (main): Likewise.
* tests/test-mbstoc32s.c (main): Likewise.
* tests/test-mbstowcs.c (main): Likewise.
* tests/test-md2-buffer.c (main): Likewise.
* tests/test-md4-buffer.c (main): Likewise.
* tests/test-md5-buffer.c (main): Likewise.
* tests/test-memalign.c (main): Likewise.
* tests/test-memcasecmp.c (main): Likewise.
* tests/test-memchr.c (main): Likewise.
* tests/test-memchr2.c (main): Likewise.
* tests/test-memcmp.c (main): Likewise.
* tests/test-memmem.c (main): Likewise.
* tests/test-memrchr.c (main): Likewise.
* tests/test-memset_explicit.c (test_stack): Likewise.
* tests/test-mkfifoat.c (main): Likewise.
* tests/test-modf.h (test_function): Likewise.
* tests/test-mountlist.c (main): Likewise.
* tests/test-mtx.c (check_accounts, lock_mutator_thread, test_mtx_plain,
reclock_mutator_thread, test_mtx_recursive): Likewise.
* tests/test-nl_langinfo2.c (main): Likewise.
* tests/test-nonblocking-misc.h (init_data): Likewise.
* tests/test-nstrftime.h (posixtm_test, tzalloc_test, quarter_test):
Likewise.
* tests/test-obstack-printf.h (test_function): Likewise.
* tests/test-obstack-zprintf-big.c (main): Likewise.
* tests/test-obstack-zprintf-posix.c (RESULT_EQ): Likewise.
* tests/test-open.h (test_open): Likewise.
* tests/test-openat-safer.c (main): Likewise.
* tests/test-options.c (test_getopt_long, test_getopt_long_posix):
Likewise.
* tests/test-pagealign_alloc.c (main): Likewise.
* tests/test-parse-datetime.c (main): Likewise.
* tests/test-perror2.c (main): Likewise.
* tests/test-pipe-filter-gi1.c (done_read): Likewise.
* tests/test-pipe-filter-ii1.c (done_read): Likewise.
* tests/test-pipe2.c (main): Likewise.
* tests/test-popen.h (main): Likewise.
* tests/test-posix_memalign.c (main): Likewise.
* tests/test-posix_spawn-script.c (main): Likewise.
* tests/test-posix_spawnp-script.c (main): Likewise.
* tests/test-posixtm.c (main): Likewise.
* tests/test-pread.c (main): Likewise.
* tests/test-pthread-mutex.c (check_accounts, lock_mutator_thread,
test_pthread_mutex_normal, reclock_mutator_thread,
test_pthread_mutex_recursive): Likewise.
* tests/test-pthread-once2.c (once_contender_thread, test_once):
Likewise.
* tests/test-pthread-rwlock.c (check_accounts, rwlock_mutator_thread,
test_rwlock): Likewise.
* tests/test-pthread-spin.c (check_accounts, lock_mutator_thread,
test_pthread_spin): Likewise.
* tests/test-pthread-tss.c (worker_thread, test_tss, dtorcheck1_thread,
test_tss_dtorcheck1, dtorcheck2_thread, test_tss_dtorcheck2,
racecheck_thread, test_tss_racecheck): Likewise.
* tests/test-ptsname.c (main): Likewise.
* tests/test-ptsname_r.c (test_errors, main): Likewise.
* tests/test-pwrite.c (main): Likewise.
* tests/test-quotearg-simple.c (main): Likewise.
* tests/test-random.c (main): Likewise.
* tests/test-random-mt.c (random_invocator_thread, main): Likewise.
* tests/test-random_r.c (test_failed, main): Likewise.
* tests/test-rawmemchr.c (main): Likewise.
* tests/test-rbtree_list.c (check_equals, main): Likewise.
* tests/test-rbtree_omap.c (check_equals, main): Likewise.
* tests/test-rbtree_oset.c (check_equals, main): Likewise.
* tests/test-rbtreehash_list.c (check_equals, main): Likewise.
* tests/test-readlink.h (test_readlink): Likewise.
* tests/test-readutmp.c (main): Likewise.
* tests/test-remainder.h (test_function): Likewise.
* tests/test-renameat.c (main): Likewise.
* tests/test-renameatu.c (main): Likewise.
* tests/test-rijndael.c (main): Likewise.
* tests/test-rint.h (test_function): Likewise.
* tests/test-round2.c (main): Likewise.
* tests/test-sameacls.c (main, room): Likewise.
* tests/test-scratch-buffer.c (main): Likewise.
* tests/test-sethostname2.c (main): Likewise.
* tests/test-sh-quote.c (main): Likewise.
* tests/test-sha1-buffer.c (main): Likewise.
* tests/test-sha224-buffer.c (main): Likewise.
* tests/test-sha256-buffer.c (main): Likewise.
* tests/test-sha3-224-buffer.c (check): Likewise.
* tests/test-sha3-256-buffer.c (check): Likewise.
* tests/test-sha3-384-buffer.c (check): Likewise.
* tests/test-sha3-512-buffer.c (check): Likewise.
* tests/test-sha384-buffer.c (main): Likewise.
* tests/test-sha512-buffer.c (main): Likewise.
* tests/test-simple-atomic.c (int_mutator_thread, ptr_mutator_thread,
main): Likewise.
* tests/test-sm3-buffer.c (test, main): Likewise.
* tests/test-snprintf.c (main): Likewise.
* tests/test-snprintf-posix.h (test_function, value, word): Likewise.
* tests/test-snzprintf-posix.h (test_function): Likewise.
* tests/test-spawn-pipe-child.c (main): Likewise.
* tests/test-spawn-pipe-main.c (main): Likewise.
* tests/test-spawn-pipe-script.c (main): Likewise.
* tests/test-spin1.c (gl_spinlock_define_initialized): Likewise.
* tests/test-spin2.c (check_accounts, gl_spinlock_define,
test_asyncsafe_spin): Likewise.
* tests/test-sprintf-posix.h (value, word): Likewise.
* tests/test-sqrt.h (test_function): Likewise.
* tests/test-ssfmalloc.c (main): Likewise.
* tests/test-stat-time.c (prepare_test, test_mtime, test_birthtime):
Likewise.
* tests/test-stpncpy.c (main): Likewise.
* tests/test-strcasestr.c (main): Likewise.
* tests/test-strchrnul.c (main): Likewise.
* tests/test-strerror_r.c (main): Likewise.
* tests/test-striconveh.c (main): Likewise.
* tests/test-striconveha.c (main): Likewise.
* tests/test-strnlen.c (main): Likewise.
* tests/test-strstr.c (main): Likewise.
* tests/test-system-quote-main.c (check_all, main): Likewise.
* tests/test-szprintf-posix.h (test_function): Likewise.
* tests/test-thread_local.c (worker_thread, test_thread_local):
Likewise.
* tests/test-times.c (main): Likewise.
* tests/test-timespec.c (main): Likewise.
* tests/test-tls.c (worker_thread, test_tls, dtorcheck1_thread,
test_tls_dtorcheck1, dtorcheck2_thread, test_tls_dtorcheck2,
racecheck_thread, test_tls_racecheck): Likewise.
* tests/test-tolower_l.c (test_single_locale_common): Likewise.
* tests/test-toupper_l.c (test_single_locale_common): Likewise.
* tests/test-trunc2.c (main): Likewise.
* tests/test-truncf2.c (main): Likewise.
* tests/test-tsearch.c (memfry, walk_tree, mangle_tree, main): Likewise.
* tests/test-tss.c (worker_thread, test_tss, dtorcheck1_thread,
test_tss_dtorcheck1, dtorcheck2_thread, test_tss_dtorcheck2,
racecheck_thread, test_tss_racecheck): Likewise.
* tests/test-userspec.c (main): Likewise.
* tests/test-vasnprintf.c (test_function): Likewise.
* tests/test-vasnprintf-big.c (main): Likewise.
* tests/test-vasnprintf-posix.c (test_function, value, word): Likewise.
* tests/test-vasnwprintf.c (test_function): Likewise.
* tests/test-vasnwprintf-big.c (main): Likewise.
* tests/test-vasnwprintf-posix.c (test_function, value, word): Likewise.
* tests/test-vasprintf.c (test_vasprintf, test_asprintf): Likewise.
* tests/test-vasprintf-posix.c (test_function, value, word): Likewise.
* tests/test-vaszprintf-posix.c (test_function): Likewise.
* tests/test-vsnprintf.c (main): Likewise.
* tests/test-wcrtomb.c (main): Likewise.
* tests/test-wcrtomb-w32.c (test_one_locale, main): Likewise.
* tests/test-wcsnrtombs.c (main): Likewise.
* tests/test-wcsrtombs.c (main): Likewise.
* tests/test-wcwidth.c (main): Likewise.
* tests/test-xstrtol.c (main): Likewise.
* tests/test-xvasprintf.c (test_xvasprintf, test_xasprintf): Likewise.
* tests/unicase/test-mapping-part2.h (main): Likewise.
* tests/unicase/test-predicate-part2.h (main): Likewise.
* tests/uniconv/test-u8-conv-from-enc.c (main): Likewise.
* tests/uniconv/test-u8-conv-to-enc.c (main): Likewise.
* tests/uniconv/test-u8-strconv-from-enc.c (main): Likewise.
* tests/uniconv/test-u8-strconv-to-enc.c (main): Likewise.
* tests/uniconv/test-u16-conv-from-enc.c (main): Likewise.
* tests/uniconv/test-u16-conv-to-enc.c (main): Likewise.
* tests/uniconv/test-u16-strconv-from-enc.c (main): Likewise.
* tests/uniconv/test-u16-strconv-to-enc.c (main): Likewise.
* tests/uniconv/test-u32-conv-from-enc.c (main): Likewise.
* tests/uniconv/test-u32-conv-to-enc.c (main): Likewise.
* tests/uniconv/test-u32-strconv-from-enc.c (main): Likewise.
* tests/uniconv/test-u32-strconv-to-enc.c (main): Likewise.
* tests/unictype/test-bidi_test.c (main): Likewise.
* tests/unictype/test-block_list.c (main): Likewise.
* tests/unictype/test-block_of.c (main): Likewise.
* tests/unictype/test-categ_byname.c (main): Likewise.
* tests/unictype/test-categ_none.c (main): Likewise.
* tests/unictype/test-categ_of.c (main): Likewise.
* tests/unictype/test-decdigit.c (main): Likewise.
* tests/unictype/test-digit.c (main): Likewise.
* tests/unictype/test-incb_of.c (main): Likewise.
* tests/unictype/test-joininggroup_of.c (main): Likewise.
* tests/unictype/test-joiningtype_of.c (main): Likewise.
* tests/unictype/test-numeric.c (main): Likewise.
* tests/unictype/test-pr_byname.c (main): Likewise.
* tests/unictype/test-pr_test.c (main): Likewise.
* tests/unictype/test-predicate-part2.h (main): Likewise.
* tests/unictype/test-scripts.c (main): Likewise.
* tests/unigbrk/test-u8-grapheme-breaks.c (test_u8_grapheme_breaks):
Likewise.
* tests/unigbrk/test-u8-grapheme-next.c (test_u8_grapheme_next):
Likewise.
* tests/unigbrk/test-u8-grapheme-prev.c (test_u8_grapheme_prev):
Likewise.
* tests/unigbrk/test-u16-grapheme-breaks.c (test_u16_grapheme_breaks):
Likewise.
* tests/unigbrk/test-u16-grapheme-next.c (test_u16_grapheme_next):
Likewise.
* tests/unigbrk/test-u16-grapheme-prev.c (test_u16_grapheme_prev):
Likewise.
* tests/unigbrk/test-u32-grapheme-breaks.c (test_u32_grapheme_breaks):
Likewise.
* tests/unigbrk/test-u32-grapheme-next.c (test_u32_grapheme_next):
Likewise.
* tests/unigbrk/test-u32-grapheme-prev.c (test_u32_grapheme_prev):
Likewise.
* tests/unigbrk/test-uc-gbrk-prop.c (main): Likewise.
* tests/unigbrk/test-uc-grapheme-breaks.c (test_uc_grapheme_breaks):
Likewise.
* tests/unigbrk/test-ulc-grapheme-breaks.c (sizeof): Likewise.
* tests/unilbrk/test-u8-possible-linebreaks.c (test_function): Likewise.
* tests/unilbrk/test-u8-width-linebreaks.c (test_function): Likewise.
* tests/unilbrk/test-u16-possible-linebreaks.c (test_function):
Likewise.
* tests/unilbrk/test-u16-width-linebreaks.c (test_function): Likewise.
* tests/unilbrk/test-u32-possible-linebreaks.c (test_function):
Likewise.
* tests/unilbrk/test-u32-width-linebreaks.c (test_function): Likewise.
* tests/unilbrk/test-uc-possible-linebreaks.c (main): Likewise.
* tests/unilbrk/test-ulc-possible-linebreaks.c (test_function):
Likewise.
* tests/unilbrk/test-ulc-width-linebreaks.c (test_function): Likewise.
* tests/uniname/test-uninames.c (name_has_alias, test_name_lookup,
test_inverse_lookup, test_alias_lookup, main): Likewise.
* tests/uninorm/test-u8-nfc.c (test_u8_nfc): Likewise.
* tests/uninorm/test-u8-nfd.c (test_u8_nfd): Likewise.
* tests/uninorm/test-u8-nfkc.c (test_u8_nfkc): Likewise.
* tests/uninorm/test-u8-nfkd.c (test_u8_nfkd): Likewise.
* tests/uninorm/test-u16-nfc.c (test_u16_nfc): Likewise.
* tests/uninorm/test-u16-nfd.c (test_u16_nfd): Likewise.
* tests/uninorm/test-u16-nfkc.c (test_u16_nfkc): Likewise.
* tests/uninorm/test-u16-nfkd.c (test_u16_nfkd): Likewise.
* tests/uninorm/test-u32-nfc.c (test_u32_nfc): Likewise.
* tests/uninorm/test-u32-nfd.c (test_u32_nfd): Likewise.
* tests/uninorm/test-u32-nfkc.c (test_u32_nfkc): Likewise.
* tests/uninorm/test-u32-nfkd.c (test_u32_nfkd): Likewise.
* tests/uninorm/test-u32-normalize-big.c (read_normalization_test_file,
test_specific, test_other, free_normalization_test_file): Likewise.
* tests/uninorm/test-uninorm-filter-nfc.c (check): Likewise.
* tests/unistdio/test-u8-asnprintf-big.c (main): Likewise.
* tests/unistdio/test-u8-asnprintf1.h (test_function): Likewise.
* tests/unistdio/test-u16-asnprintf1.h (test_function): Likewise.
* tests/unistdio/test-u32-asnprintf1.h (test_function): Likewise.
* tests/unistdio/test-ulc-asnprintf-big.c (main): Likewise.
* tests/unistdio/test-ulc-asnprintf1.h (test_function): Likewise.
* tests/unistr/test-chr.h (main): Likewise.
* tests/unistr/test-cmp.h (test_cmp): Likewise.
* tests/unistr/test-cpy-alloc.h (main): Likewise.
* tests/unistr/test-cpy.h (main): Likewise.
* tests/unistr/test-move.h (main): Likewise.
* tests/unistr/test-pcpy.h (main): Likewise.
* tests/unistr/test-set.h (NMAX, main): Likewise.
* tests/unistr/test-stpcpy.h (main): Likewise.
* tests/unistr/test-stpncpy.h (check_single, check): Likewise.
* tests/unistr/test-strcat.h (main): Likewise.
* tests/unistr/test-strchr.h (test_strchr): Likewise.
* tests/unistr/test-strcpy.h (main): Likewise.
* tests/unistr/test-strdup.h (main): Likewise.
* tests/unistr/test-strncat.h (check_single, check): Likewise.
* tests/unistr/test-strncpy.h (check_single, check): Likewise.
* tests/unistr/test-strnlen.h (check): Likewise.
* tests/unistr/test-u-strstr.h (test_u_strstr): Likewise.
* tests/unistr/test-u16-mblen.c (main): Likewise.
* tests/unistr/test-u16-mbsnlen.c (main): Likewise.
* tests/unistr/test-u16-mbtouc.h (test_function): Likewise.
* tests/unistr/test-u16-mbtoucr.c (main): Likewise.
* tests/unistr/test-u16-next.c (main): Likewise.
* tests/unistr/test-u16-prev.c (check, check_invalid, main): Likewise.
* tests/unistr/test-u16-strmblen.c (main): Likewise.
* tests/unistr/test-u16-strmbtouc.c (main): Likewise.
* tests/unistr/test-u16-uctomb.c (main): Likewise.
* tests/unistr/test-u32-mblen.c (main): Likewise.
* tests/unistr/test-u32-mbsnlen.c (main): Likewise.
* tests/unistr/test-u32-mbtouc.h (test_function): Likewise.
* tests/unistr/test-u32-mbtoucr.c (main): Likewise.
* tests/unistr/test-u32-next.c (main): Likewise.
* tests/unistr/test-u32-prev.c (check, check_invalid, main): Likewise.
* tests/unistr/test-u32-strmblen.c (main): Likewise.
* tests/unistr/test-u32-strmbtouc.c (main): Likewise.
* tests/unistr/test-u32-uctomb.c (main): Likewise.
* tests/unistr/test-u8-mblen.c (main): Likewise.
* tests/unistr/test-u8-mbsnlen.c (main): Likewise.
* tests/unistr/test-u8-mbtouc.c (test_safe_function): Likewise.
* tests/unistr/test-u8-mbtouc.h (test_function): Likewise.
* tests/unistr/test-u8-mbtoucr.c (main): Likewise.
* tests/unistr/test-u8-next.c (main): Likewise.
* tests/unistr/test-u8-prev.c (check, check_invalid, main): Likewise.
* tests/unistr/test-u8-strmblen.c (main): Likewise.
* tests/unistr/test-u8-strmbtouc.c (main): Likewise.
* tests/unistr/test-u8-uctomb.c (main): Likewise.
* tests/uniwbrk/test-u8-wordbreaks.c (main): Likewise.
* tests/uniwbrk/test-u16-wordbreaks.c (main): Likewise.
* tests/uniwbrk/test-u32-wordbreaks.c (main): Likewise.
* tests/uniwbrk/test-uc-wordbreaks.c (main): Likewise.
* tests/uniwbrk/test-ulc-wordbreaks.c (main): Likewise.
* tests/uniwidth/test-uc_width.c (main): Likewise.
* tests/uniwidth/test-uc_width2.c (main): Likewise.
* tests/virtualbox.h (is_running_under_virtualbox_kvm, num_cpus):
Likewise.
* tests/test-regex.c (bug_regex11, main): Likewise. Rename local
variables.

2 months ago-Wunused-const-variable started in GCC 6.1 not 4.4
Paul Eggert [Sat, 15 Nov 2025 22:37:29 +0000 (14:37 -0800)] 
-Wunused-const-variable started in GCC 6.1 not 4.4

I ran into this glitch when building with GCC 4.8.5 20150623 (Red
Hat 4.8.5-44) on CentOS 7.9 (cfarm112.cfarm.net), which lacked
-Wno-unused-const-variable.  The online manuals suggested that
-Wunused-const-variable was introduced in GCC 6.1.
* m4/gnulib-common.m4 (gl_CC_GNULIB_WARNINGS):
Use -Wno-unused-const-variable with GCC 6.1 and later,
not with GCC 4.4 and later.

2 months agoopenat2: fix symlink splicing bug
Paul Eggert [Sat, 15 Nov 2025 03:42:50 +0000 (19:42 -0800)] 
openat2: fix symlink splicing bug

This bug was found when using openat2 in an experimental version
of GNU tar atop an older Linux kernel.
* lib/openat2.c (do_openat2): When splicing symlink contents not at
name end, restore the slash that previously followed the symlink name.
* tests/test-openat2.c (do_test_resolve): Add tests for the bug.

2 months agoopenat2: port to O_DIRECTORY before O_NOFOLLOW
Paul Eggert [Fri, 14 Nov 2025 23:29:09 +0000 (15:29 -0800)] 
openat2: port to O_DIRECTORY before O_NOFOLLOW

* lib/openat2.c (do_openat2): Don’t assume that openat (...,
"symlink", O_DIRECTORY | O_NOFOLLOW | ...) will fail with ELOOP.
The O_DIRECTORY check might be done first, so it might fail with
ENOTDIR.  Problem discovered on Solaris 10.
* tests/test-openat2.c (do_prepare_symlinks, do_test_resolve)
(do_test_basic): Test for the portability bug.

2 months agoopenat2-tests: port to O_RDONLY != 0
Paul Eggert [Fri, 14 Nov 2025 22:58:52 +0000 (14:58 -0800)] 
openat2-tests: port to O_RDONLY != 0

* tests/test-openat2.c (do_test_resolve):
Don’t assume O_RDONLY == 0.

2 months agoopenat2-tests: expand tabs in source
Paul Eggert [Fri, 14 Nov 2025 21:57:11 +0000 (13:57 -0800)] 
openat2-tests: expand tabs in source

2 months agofile-remote: Tweaks.
Bruno Haible [Thu, 13 Nov 2025 10:29:16 +0000 (11:29 +0100)] 
file-remote: Tweaks.

* lib/file-remote.c (file_is_remote): On Haiku, avoid an incorrectly
documented system function. Demonstrate a slow fallback code for unknown
platforms.

2 months agofile-remote: Consider Linux pipefs as local.
Bruno Haible [Wed, 12 Nov 2025 18:47:54 +0000 (19:47 +0100)] 
file-remote: Consider Linux pipefs as local.

Reported by Pádraig Brady <P@draigBrady.com> in
<https://lists.gnu.org/archive/html/bug-gnulib/2025-11/msg00124.html>.

* lib/file-remote.c (file_is_remote) [Linux]: Don't consider pipefs as
remote.

2 months agobootstrap: Improve installation of git-merge-changelog driver.
Bruno Haible [Wed, 12 Nov 2025 14:03:00 +0000 (15:03 +0100)] 
bootstrap: Improve installation of git-merge-changelog driver.

Suggested by Basil L. Contovounesios <basil@contovou.net> in
<https://lists.gnu.org/archive/html/bug-gnulib/2025-11/msg00122.html>.

* top/bootstrap-funclib.sh (autopull): Pass a 4th argument to
git-merge-changelog.
* build-aux/bootstrap: Regenerated.

2 months agodo-release-commit-and-tag: Accommodate alternative NEWS formats.
Basil L. Contovounesios [Tue, 11 Nov 2025 18:23:39 +0000 (19:23 +0100)] 
do-release-commit-and-tag: Accommodate alternative NEWS formats.

* build-aux/do-release-commit-and-tag: Introduce new options
parametrizing the NEWS file name, and its noteworthy_stub location
and contents.  Avoid unconditional strftime in inner Perl loop.
(help): Describe the new options.

2 months agofile-remote: New module.
Bruno Haible [Wed, 12 Nov 2025 12:57:50 +0000 (13:57 +0100)] 
file-remote: New module.

* lib/file-remote.h: New file.
* lib/file-remote.c: New file.
* modules/file-remote: New file.

2 months agopthread-cond, cond, cnd tests: Fix spurious failure on Linux/SPARC.
Bruno Haible [Tue, 11 Nov 2025 23:05:02 +0000 (00:05 +0100)] 
pthread-cond, cond, cnd tests: Fix spurious failure on Linux/SPARC.

Reported by Santiago Vila <sanvila@debian.org> in
<https://lists.gnu.org/archive/html/bug-gettext/2025-11/msg00005.html>.

* tests/test-pthread-cond.c (test_pthread_cond_timedwait): Sleep for 3
instead of 2 seconds.
* tests/test-cond.c (test_timedcond): Likewise.
* tests/test-cnd.c (test_cnd_timedwait): Likewise.

2 months agoreadme-release: Accommodate alternative NEWS formats.
Basil L. Contovounesios [Tue, 11 Nov 2025 18:30:47 +0000 (19:30 +0100)] 
readme-release: Accommodate alternative NEWS formats.

* top/README-release: Generalize 'noteworthy changes' location.

2 months agomaintainer-makefile: Accommodate alternative NEWS formats.
Basil L. Contovounesios [Tue, 11 Nov 2025 18:24:41 +0000 (19:24 +0100)] 
maintainer-makefile: Accommodate alternative NEWS formats.

* top/maint.mk (gl_noteworthy_news_): Make overridable.
(news-check-regexp-prev, NEWS_file, release_commit_args): New
overridable variables.
(NEWS_hash, sc_immutable_NEWS, update-NEWS-hash, news-check)
(announcement, release-commit, emit-commit-log): Use them.
(release-prep): Ditto.  Search for news-check-regexp within
news-check-lines-spec instead of hard-coding line 3.

2 months agomaintainer-makefile: Quieter 'release' target.
Basil L. Contovounesios [Tue, 11 Nov 2025 18:21:44 +0000 (19:21 +0100)] 
maintainer-makefile: Quieter 'release' target.

* top/maint.mk (update-NEWS-hash): Use AM_V_GEN.
(gpgv): Detect gpgv2 via 'command -v'; calling it directly results
in several 'gpgv2: command not found' messages.

2 months agodoc: Tweak wording about _Bool.
Bruno Haible [Tue, 11 Nov 2025 17:42:03 +0000 (18:42 +0100)] 
doc: Tweak wording about _Bool.

* doc/posix-headers/stdbool.texi: Fix typo in comment.

2 months agodoc: Tweak wording about _Bool.
Bruno Haible [Tue, 11 Nov 2025 14:04:13 +0000 (15:04 +0100)] 
doc: Tweak wording about _Bool.

Reported by Alejandro Colomar <alx@kernel.org> in
<https://lists.gnu.org/archive/html/bug-gnulib/2025-11/msg00106.html>.

* doc/posix-headers/stdbool.texi: State that _Bool may be a keyword.

2 months agoargp: Don't use an 'rpl_' function name prefix if not necessary.
Bruno Haible [Mon, 10 Nov 2025 22:30:41 +0000 (23:30 +0100)] 
argp: Don't use an 'rpl_' function name prefix if not necessary.

Reported by Andrew Schulman <andrex.e.schulman@gmail.com> in
<https://lists.gnu.org/archive/html/bug-gnulib/2025-11/msg00100.html>.

* m4/argp.m4 (gl_ARGP): Don't rename argp_parse to rpl_argp_parse in
config.h if libc does not have argp_parse().

2 months agoposix_spawnp tests: Add test against previous bug.
Bruno Haible [Mon, 10 Nov 2025 09:28:28 +0000 (10:28 +0100)] 
posix_spawnp tests: Add test against previous bug.

* tests/test-posix_spawnp-vfork.c: New file, based on
tests/test-posix_spawnp-script.c.
* modules/posix_spawnp-tests (Files): Add it.
(Makefile.am): Arrange to compile and test test-posix_spawnp-vfork.

2 months agogendocs: port better to texi2html 5.0
Paul Eggert [Sat, 8 Nov 2025 20:45:49 +0000 (12:45 -0800)] 
gendocs: port better to texi2html 5.0

Problem reported by Sergey Poznyakoff in:
https://lists.gnu.org/archive/html/bug-gnulib/2021-03/msg00002.html
* build-aux/gendocs.sh (html_split): Do not create symlink
from index.html to ${PACKAGE}.html if the former exists
or the latter does not.

2 months agorenameat, renameatu: Work around GNU/Hurd bugs.
Collin Funk [Fri, 7 Nov 2025 05:18:12 +0000 (21:18 -0800)] 
renameat, renameatu: Work around GNU/Hurd bugs.

* lib/renameatu.c (renameatu): Handle RENAME_TRAILING_SLASH_SOURCE_BUG
and RENAME_TRAILING_SLASH_DEST_BUG when renameat2 is called.
* doc/glibc-functions/renameat2.texi: Mention the bugs.
* doc/posix-functions/renameat.texi: Likewise.

2 months agoposix_spawn-internal: Fix a comment.
Bruno Haible [Fri, 7 Nov 2025 15:03:00 +0000 (16:03 +0100)] 
posix_spawn-internal: Fix a comment.

* lib/spawni.c (__spawni): Remove an outdated comment.