Work even if the system <string.h> declares memeq and streq.
Current standards allow systems to do that,
and we hope future systems will do it.
* lib/string.in.h (memeq) [HAVE_DECL_MEMEQ]: Do not define.
(streq) [HAVE_DECL_STREQ]: Do not define.
* m4/string_h.m4 (gl_STRING_H_DEFAULTS): Default HAVE_DECL_MEMEQ,
HAVE_DECL_STREQ.
* modules/string-h (string-h):
Substitute HAVE_DECL_MEMEQ, HAVE_DECL_STREQ.
* modules/stringeq (configure.ac):
Define HAVE_DECL_MEMEQ, HAVE_DECL_STREQ.
+2025-09-17 Paul Eggert <eggert@cs.ucla.edu>
+
+ stringeq: port to platforms declaring memeq, streq
+ Work even if the system <string.h> declares memeq and streq.
+ Current standards allow systems to do that,
+ and we hope future systems will do it.
+ * lib/string.in.h (memeq) [HAVE_DECL_MEMEQ]: Do not define.
+ (streq) [HAVE_DECL_STREQ]: Do not define.
+ * m4/string_h.m4 (gl_STRING_H_DEFAULTS): Default HAVE_DECL_MEMEQ,
+ HAVE_DECL_STREQ.
+ * modules/string-h (string-h):
+ Substitute HAVE_DECL_MEMEQ, HAVE_DECL_STREQ.
+ * modules/stringeq (configure.ac):
+ Define HAVE_DECL_MEMEQ, HAVE_DECL_STREQ.
+
2025-09-17 Bruno Haible <bruno@clisp.org>
gen-uni-tables: Fix module description (left-over from 2025-05-11).
#endif
/* Are S1 and S2, of size N, bytewise equal? */
-#if @GNULIB_STRINGEQ@
+#if @GNULIB_STRINGEQ@ && !@HAVE_DECL_MEMEQ@
_GL_STRING_INLINE bool
memeq (void const *__s1, void const *__s2, size_t __n)
{
#endif
/* Are strings S1 and S2 equal? */
-#if @GNULIB_STRINGEQ@
+#if @GNULIB_STRINGEQ@ && !@HAVE_DECL_STREQ@
_GL_STRING_INLINE bool
streq (char const *__s1, char const *__s2)
{
HAVE_EXPLICIT_BZERO=1; AC_SUBST([HAVE_EXPLICIT_BZERO])
HAVE_FFSL=1; AC_SUBST([HAVE_FFSL])
HAVE_FFSLL=1; AC_SUBST([HAVE_FFSLL])
+ HAVE_DECL_MEMEQ=0; AC_SUBST([HAVE_DECL_MEMEQ])
HAVE_DECL_MEMMEM=1; AC_SUBST([HAVE_DECL_MEMMEM])
HAVE_MEMPCPY=1; AC_SUBST([HAVE_MEMPCPY])
HAVE_MEMSET_EXPLICIT=1; AC_SUBST([HAVE_MEMSET_EXPLICIT])
HAVE_STPNCPY=1; AC_SUBST([HAVE_STPNCPY])
HAVE_STRCHRNUL=1; AC_SUBST([HAVE_STRCHRNUL])
HAVE_DECL_STRDUP=1; AC_SUBST([HAVE_DECL_STRDUP])
+ HAVE_DECL_STREQ=0; AC_SUBST([HAVE_DECL_STREQ])
HAVE_DECL_STRNDUP=1; AC_SUBST([HAVE_DECL_STRNDUP])
HAVE_DECL_STRNLEN=1; AC_SUBST([HAVE_DECL_STRNLEN])
HAVE_STRPBRK=1; AC_SUBST([HAVE_STRPBRK])
-e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \
-e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \
-e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \
+ -e 's|@''HAVE_DECL_MEMEQ''@|$(HAVE_DECL_MEMEQ)|g' \
-e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \
-e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \
-e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \
-e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \
-e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \
-e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \
+ -e 's|@''HAVE_DECL_STREQ''@|$(HAVE_DECL_STREQ)|g' \
-e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \
-e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \
-e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \
string-h
configure.ac:
+AC_CHECK_DECLS_ONCE([memeq, streq])
+test $ac_cv_have_decl_memeq = no || HAVE_DECL_MEMEQ=1
+test $ac_cv_have_decl_streq = no || HAVE_DECL_STREQ=1
gl_STRING_MODULE_INDICATOR([stringeq])
Makefile.am: