Update from Gnulib by running admin/merge-gnulib

* admin/merge-gnulib (GNULIB_MODULES): Add memeq, streq and remove
stringeq, to adjust to a module splitup in Gnulib.
* lib/memeq.c, lib/streq.c, lib/strnul.c, m4/memeq.m4, m4/streq.m4:
New files.
* lib/string.c, m4/stringeq.m4: Remove.
This commit is contained in:
Paul Eggert
2026-03-01 10:28:33 -08:00
parent b715ae5b34
commit 381eb4985b
14 changed files with 136 additions and 52 deletions

View File

@@ -43,7 +43,7 @@ GNULIB_MODULES='
free-posix fstatat fsusage fsync futimens
getline getloadavg getopt-gnu getrandom gettime gettimeofday gitlog-to-changelog
ieee754-h ignore-value intprops largefile libgmp lstat
malloc-gnu manywarnings memmem-simple mempcpy memrchr memset_explicit
malloc-gnu manywarnings memeq memmem-simple mempcpy memrchr memset_explicit
minmax mkostemp mktime
nanosleep nproc nstrftime-limited
pathmax pipe2 pselect pthread_sigmask
@@ -51,7 +51,7 @@ GNULIB_MODULES='
sig2str sigdescr_np socklen stat-time std-gnu23
stdc_bit_width stdc_count_ones stdc_trailing_zeros
stdckdint-h stddef-h stdio-h stdio-windows
stpcpy stringeq strnlen strtoimax symlink sys_stat-h sys_time-h
stpcpy streq strnlen strtoimax symlink sys_stat-h sys_time-h
tempname time-h time_r time_rz timegm timer-time timespec-add timespec-sub
unlocked-io update-copyright utimensat
warnings year2038

View File

@@ -145,7 +145,7 @@ aclinfo_has_xattr (struct aclinfo const *ai, char const *xattr)
if (0 < ai->size)
{
char const *blim = ai->buf + ai->size;
for (char const *b = ai->buf; b < blim; b += strlen (b) + 1)
for (char const *b = ai->buf; b < blim; b = strnul (b) + 1)
for (char const *a = xattr; *a == *b; a++, b++)
if (!*a)
return true;

View File

@@ -140,6 +140,7 @@
# lstat \
# malloc-gnu \
# manywarnings \
# memeq \
# memmem-simple \
# mempcpy \
# memrchr \
@@ -172,7 +173,7 @@
# stdio-h \
# stdio-windows \
# stpcpy \
# stringeq \
# streq \
# strnlen \
# strtoimax \
# symlink \
@@ -537,6 +538,7 @@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@
GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@
GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@
GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@
GL_GNULIB_MEMEQ = @GL_GNULIB_MEMEQ@
GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@
GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@
GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@
@@ -626,12 +628,12 @@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@
GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@
GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@
GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@
GL_GNULIB_STREQ = @GL_GNULIB_STREQ@
GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@
GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@
GL_GNULIB_STRERROR_L = @GL_GNULIB_STRERROR_L@
GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@
GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@
GL_GNULIB_STRINGEQ = @GL_GNULIB_STRINGEQ@
GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@
GL_GNULIB_STRNCPY = @GL_GNULIB_STRNCPY@
GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@
@@ -2790,6 +2792,14 @@ EXTRA_libgnu_a_SOURCES += malloc.c
endif
## end gnulib module malloc-posix
## begin gnulib module memeq
ifeq (,$(OMIT_GNULIB_MODULE_memeq))
libgnu_a_SOURCES += memeq.c
endif
## end gnulib module memeq
## begin gnulib module memmem-simple
ifeq (,$(OMIT_GNULIB_MODULE_memmem-simple))
@@ -3729,6 +3739,14 @@ endif
endif
## end gnulib module stpcpy
## begin gnulib module streq
ifeq (,$(OMIT_GNULIB_MODULE_streq))
libgnu_a_SOURCES += streq.c
endif
## end gnulib module streq
## begin gnulib module string-h
ifeq (,$(OMIT_GNULIB_MODULE_string-h))
@@ -3763,6 +3781,7 @@ string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
-e 's/@''GNULIB_MBS_ENDSWITH''@/$(GL_GNULIB_MBS_ENDSWITH)/g' \
-e 's/@''GNULIB_MBS_STARTSWITH''@/$(GL_GNULIB_MBS_STARTSWITH)/g' \
-e 's/@''GNULIB_MEMCHR''@/$(GL_GNULIB_MEMCHR)/g' \
-e 's/@''GNULIB_MEMEQ''@/$(GL_GNULIB_MEMEQ)/g' \
-e 's/@''GNULIB_MEMMEM''@/$(GL_GNULIB_MEMMEM)/g' \
-e 's/@''GNULIB_MEMPCPY''@/$(GL_GNULIB_MEMPCPY)/g' \
-e 's/@''GNULIB_MEMRCHR''@/$(GL_GNULIB_MEMRCHR)/g' \
@@ -3772,7 +3791,7 @@ string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H
-e 's/@''GNULIB_STPNCPY''@/$(GL_GNULIB_STPNCPY)/g' \
-e 's/@''GNULIB_STRCHRNUL''@/$(GL_GNULIB_STRCHRNUL)/g' \
-e 's/@''GNULIB_STRDUP''@/$(GL_GNULIB_STRDUP)/g' \
-e 's/@''GNULIB_STRINGEQ''@/$(GL_GNULIB_STRINGEQ)/g' \
-e 's/@''GNULIB_STREQ''@/$(GL_GNULIB_STREQ)/g' \
-e 's/@''GNULIB_STRNCAT''@/$(GL_GNULIB_STRNCAT)/g' \
-e 's/@''GNULIB_STRNCPY''@/$(GL_GNULIB_STRNCPY)/g' \
-e 's/@''GNULIB_STRNDUP''@/$(GL_GNULIB_STRNDUP)/g' \
@@ -3863,14 +3882,6 @@ EXTRA_DIST += string.in.h
endif
## end gnulib module string-h
## begin gnulib module stringeq
ifeq (,$(OMIT_GNULIB_MODULE_stringeq))
libgnu_a_SOURCES += string.c
endif
## end gnulib module stringeq
## begin gnulib module strnlen
ifeq (,$(OMIT_GNULIB_MODULE_strnlen))
@@ -3881,6 +3892,14 @@ endif
endif
## end gnulib module strnlen
## begin gnulib module strnul
ifeq (,$(OMIT_GNULIB_MODULE_strnul))
libgnu_a_SOURCES += strnul.c
endif
## end gnulib module strnul
## begin gnulib module strtoimax
ifeq (,$(OMIT_GNULIB_MODULE_strtoimax))

View File

@@ -1,4 +1,4 @@
/* streq, memeq, gl_strnul functions.
/* memeq function.
Copyright (C) 2025-2026 Free Software Foundation, Inc.
This file is free software: you can redistribute it and/or modify
@@ -14,6 +14,6 @@
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#define _GL_STRING_INLINE _GL_EXTERN_INLINE
#define _GL_MEMEQ_INLINE _GL_EXTERN_INLINE
#include <config.h>
#include <string.h>

View File

@@ -378,7 +378,7 @@ sha3_read_ctx (struct sha3_ctx const *restrict ctx, void *restrict resbuf)
{
if (EVP_MD_CTX_copy_ex (evp_ctx, ctx->evp_ctx))
{
if (EVP_DigestFinal_ex (evp_ctx, resbuf, 0))
if (EVP_DigestFinal_ex (evp_ctx, resbuf, NULL))
result = resbuf;
err = EINVAL;
}

19
lib/streq.c Normal file
View File

@@ -0,0 +1,19 @@
/* streq function.
Copyright (C) 2025-2026 Free Software Foundation, Inc.
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#define _GL_STREQ_INLINE _GL_EXTERN_INLINE
#include <config.h>
#include <string.h>

View File

@@ -888,6 +888,7 @@ static CHAR_T const c_month_names[][sizeof "September"] =
L_("June"), L_("July"), L_("August"), L_("September"), L_("October"),
L_("November"), L_("December")
};
static CHAR_T const c_ampm_letters[] = { L_('A'), L_('M'), L_('P'), L_('M') };
#endif
@@ -1274,7 +1275,7 @@ __strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize)
# define f_month \
(tp->tm_mon < 0 || tp->tm_mon > 11 ? L_("?") : c_month_names[tp->tm_mon])
/* The English AM/PM strings happen to have the same length, namely 2. */
# define ampm (L_("AMPM") + 2 * (tp->tm_hour > 11))
# define ampm (c_ampm_letters + 2 * (12 <= tp->tm_hour))
# define ap_len 2
#endif
retval_t i = 0;
@@ -1358,7 +1359,7 @@ __strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize)
mbstate_t mbstate = mbstate_zero;
if (! format_end)
format_end = f + strlen (f) + 1;
format_end = strnul (f) + 1;
size_t fsize = format_end - f;
size_t len = 0;

View File

@@ -81,9 +81,14 @@
#endif
_GL_INLINE_HEADER_BEGIN
#ifndef _GL_STRING_INLINE
# define _GL_STRING_INLINE _GL_INLINE
#ifndef _GL_MEMEQ_INLINE
# define _GL_MEMEQ_INLINE _GL_INLINE
#endif
#ifndef _GL_STREQ_INLINE
# define _GL_STREQ_INLINE _GL_INLINE
#endif
#ifndef _GL_STRNUL_INLINE
# define _GL_STRNUL_INLINE _GL_INLINE
#endif
/* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers
@@ -414,11 +419,11 @@ _GL_WARN_ON_USE_CXX (memchr,
#endif
/* Are S1 and S2, of size N, bytewise equal? */
#if @GNULIB_STRINGEQ@ && !@HAVE_DECL_MEMEQ@
#if @GNULIB_MEMEQ@ && !@HAVE_DECL_MEMEQ@
# ifdef __cplusplus
extern "C" {
# endif
_GL_STRING_INLINE bool
_GL_MEMEQ_INLINE bool
memeq (void const *__s1, void const *__s2, size_t __n)
{
return !memcmp (__s1, __s2, __n);
@@ -799,11 +804,11 @@ _GL_CXXALIASWARN (strdup);
#endif
/* Are strings S1 and S2 equal? */
#if @GNULIB_STRINGEQ@ && !@HAVE_DECL_STREQ@
#if @GNULIB_STREQ@ && !@HAVE_DECL_STREQ@
# ifdef __cplusplus
extern "C" {
# endif
_GL_STRING_INLINE bool
_GL_STREQ_INLINE bool
streq (char const *__s1, char const *__s2)
{
return !strcmp (__s1, __s2);
@@ -1243,10 +1248,10 @@ _GL_WARN_ON_USE (strtok_r, "strtok_r is unportable - "
# ifdef __cplusplus
extern "C" {
# endif
_GL_STRING_INLINE const char *gl_strnul (const char *string)
_GL_STRNUL_INLINE const char *gl_strnul (const char *string)
_GL_ATTRIBUTE_PURE
_GL_ARG_NONNULL ((1));
_GL_STRING_INLINE const char *gl_strnul (const char *string)
_GL_STRNUL_INLINE const char *gl_strnul (const char *string)
{
/* In gcc >= 7 or clang >= 4, we could use the expression
strchr (string, '\0')
@@ -1260,21 +1265,29 @@ _GL_STRING_INLINE const char *gl_strnul (const char *string)
}
# endif
# ifdef __cplusplus
_GL_BEGIN_NAMESPACE
template <typename T> T strnul (T);
template <> inline const char *strnul<const char *> (const char *s)
{ return gl_strnul (s); }
template <> inline char *strnul< char *> ( char *s)
{ return const_cast<char *>(gl_strnul (s)); }
_GL_END_NAMESPACE
# else
# if (defined __GNUC__ && __GNUC__ + (__GNUC_MINOR__ >= 9) > 4 && !defined __cplusplus) \
|| (defined __clang__ && __clang_major__ >= 3) \
|| (defined __SUNPRO_C && __SUNPRO_C >= 0x5150) \
|| (__STDC_VERSION__ >= 201112L && !defined __GNUC__)
/* The compiler supports _Generic from ISO C11. */
/* Since in C (but not in C++!), any function that accepts a '[const] char *'
also accepts a '[const] void *' as argument, we make sure that the function-
like macro does the same, by mapping its type first:
char *, void * -> void *
const char *, const void * -> const void *
This mapping is done through the conditional expression. */
# define strnul(s) \
_Generic (s, \
char * : (char *) gl_strnul (s), \
const char * : gl_strnul (s))
_Generic (1 ? (s) : (void *) 99, \
void * : (char *) gl_strnul (s), \
const void * : gl_strnul (s))
# else
# define strnul(s) \
((char *) gl_strnul (s))
@@ -1609,8 +1622,6 @@ _GL_EXTERN_C char * mbstok_r (char *restrict string, const char *delim,
_GL_EXTERN_C bool mbs_startswith (const char *string, const char *prefix)
_GL_ATTRIBUTE_PURE
_GL_ARG_NONNULL ((1, 2));
/* No extra code is needed for multibyte locales for this function. */
# define mbs_startswith str_startswith
#endif
#if @GNULIB_MBS_ENDSWITH@

19
lib/strnul.c Normal file
View File

@@ -0,0 +1,19 @@
/* gl_strnul function.
Copyright (C) 2025-2026 Free Software Foundation, Inc.
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. */
#define _GL_STRNUL_INLINE _GL_EXTERN_INLINE
#include <config.h>
#include <string.h>

View File

@@ -146,7 +146,7 @@ save_abbr (timezone_t tz, struct tm *tm)
break;
}
zone_copy += strlen (zone_copy) + 1;
zone_copy = strnul (zone_copy) + 1;
if (!*zone_copy && tz->next)
{
tz = tz->next;

View File

@@ -146,6 +146,7 @@ AC_DEFUN([gl_EARLY],
# Code from module malloc-gnu:
# Code from module malloc-posix:
# Code from module manywarnings:
# Code from module memeq:
# Code from module memmem-simple:
# Code from module mempcpy:
# Code from module memrchr:
@@ -196,9 +197,10 @@ AC_DEFUN([gl_EARLY],
# Code from module stdio-windows:
# Code from module stdlib-h:
# Code from module stpcpy:
# Code from module streq:
# Code from module string-h:
# Code from module stringeq:
# Code from module strnlen:
# Code from module strnul:
# Code from module strtoimax:
# Code from module strtoll:
# Code from module symlink:
@@ -446,6 +448,8 @@ AC_DEFUN([gl_INIT],
AC_LIBOBJ([malloc])
fi
gl_STDLIB_MODULE_INDICATOR([malloc-posix])
gl_FUNC_MEMEQ
gl_STRING_MODULE_INDICATOR([memeq])
gl_FUNC_MEMMEM_SIMPLE
if test $HAVE_MEMMEM = 0 || test $REPLACE_MEMMEM = 1; then
AC_LIBOBJ([memmem])
@@ -621,12 +625,11 @@ AC_DEFUN([gl_INIT],
gl_PREREQ_STPCPY
])
gl_STRING_MODULE_INDICATOR([stpcpy])
gl_FUNC_STREQ
gl_STRING_MODULE_INDICATOR([streq])
gl_STRING_H
gl_STRING_H_REQUIRE_DEFAULTS
AC_PROG_MKDIR_P
gl_FUNC_STREQ
gl_FUNC_MEMEQ
gl_STRING_MODULE_INDICATOR([stringeq])
gl_FUNC_STRNLEN
gl_CONDITIONAL([GL_COND_OBJ_STRNLEN],
[test $HAVE_DECL_STRNLEN = 0 || test $REPLACE_STRNLEN = 1])
@@ -634,6 +637,7 @@ AC_DEFUN([gl_INIT],
gl_PREREQ_STRNLEN
])
gl_STRING_MODULE_INDICATOR([strnlen])
gl_STRING_MODULE_INDICATOR([strnul])
gl_FUNC_STRTOIMAX
gl_CONDITIONAL([GL_COND_OBJ_STRTOIMAX],
[test $HAVE_DECL_STRTOIMAX = 0 || test $REPLACE_STRTOIMAX = 1])
@@ -1405,6 +1409,7 @@ AC_DEFUN([gl_FILE_LIST], [
lib/md5-stream.c
lib/md5.c
lib/md5.h
lib/memeq.c
lib/memmem.c
lib/mempcpy.c
lib/memrchr.c
@@ -1476,11 +1481,12 @@ AC_DEFUN([gl_FILE_LIST], [
lib/stdlib.in.h
lib/stpcpy.c
lib/str-two-way.h
lib/streq.c
lib/strftime.c
lib/strftime.h
lib/string.c
lib/string.in.h
lib/strnlen.c
lib/strnul.c
lib/strtoimax.c
lib/strtol.c
lib/strtoll.c
@@ -1581,6 +1587,7 @@ AC_DEFUN([gl_FILE_LIST], [
m4/manywarnings.m4
m4/mbstate_t.m4
m4/md5.m4
m4/memeq.m4
m4/memmem.m4
m4/mempcpy.m4
m4/memrchr.m4
@@ -1631,8 +1638,8 @@ AC_DEFUN([gl_FILE_LIST], [
m4/stdio_h.m4
m4/stdlib_h.m4
m4/stpcpy.m4
m4/streq.m4
m4/string_h.m4
m4/stringeq.m4
m4/strnlen.m4
m4/strtoimax.m4
m4/strtoll.m4

View File

@@ -1,4 +1,4 @@
# stringeq.m4
# memeq.m4
# serial 1
dnl Copyright (C) 2025-2026 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
@@ -6,15 +6,6 @@ dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl This file is offered as-is, without any warranty.
AC_DEFUN([gl_FUNC_STREQ],
[
AC_REQUIRE([gl_STRING_H_DEFAULTS])
AC_CHECK_DECLS_ONCE([streq])
if test $ac_cv_have_decl_streq != no; then
HAVE_DECL_STREQ=1
fi
])
AC_DEFUN([gl_FUNC_MEMEQ],
[
AC_REQUIRE([gl_STRING_H_DEFAULTS])

16
m4/streq.m4 Normal file
View File

@@ -0,0 +1,16 @@
# streq.m4
# serial 1
dnl Copyright (C) 2025-2026 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl This file is offered as-is, without any warranty.
AC_DEFUN([gl_FUNC_STREQ],
[
AC_REQUIRE([gl_STRING_H_DEFAULTS])
AC_CHECK_DECLS_ONCE([streq])
if test $ac_cv_have_decl_streq != no; then
HAVE_DECL_STREQ=1
fi
])

View File

@@ -1,5 +1,5 @@
# string_h.m4
# serial 47
# serial 48
dnl Copyright (C) 2007-2026 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
@@ -54,6 +54,7 @@ AC_DEFUN([gl_STRING_H_REQUIRE_DEFAULTS],
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FFSL])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FFSLL])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMCHR])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMEQ])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMMEM])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMPCPY])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMRCHR])
@@ -63,7 +64,7 @@ AC_DEFUN([gl_STRING_H_REQUIRE_DEFAULTS],
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STPNCPY])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRCHRNUL])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRDUP])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRINGEQ])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STREQ])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRNCAT])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRNCPY])
gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRNDUP])