fixincludes: Declare memmem if it's not declared in system headers [PR109293]

memmem is not POSIX so the system may lack it.  Then libiberty will
provide an implementation, but it's a "supplemental function" and not
declared in libiberty.h.  We need to declare the prototype to use it
then.

See libiberty doc at
https://gcc.gnu.org/onlinedocs/libiberty/Supplemental-Functions.html.

Tested by bootstrapping GCC in the following container environments on
x86_64-linux-gnu:

1. "Vanilla" system with memmem in Glibc.
2. memmem removed from string.h.
3. memmem removed from both string.h and libc.so.

For 3, also verified that memmem from libiberty is linked into fixincl
executable.

Ok for trunk?

fixincludes/ChangeLog:

	PR other/109293
	* configure.ac (AC_CHECK_DECLS): Add memmem.
	* configure: Regenerate.
	* config.h.in: Regenerate.
	* system.h (memmem): Declare if HAVE_DECL_MEMMEM is zero.
This commit is contained in:
Xi Ruoyao 2023-03-28 01:48:02 +08:00
parent 33312336d5
commit 21c74b6ea4
No known key found for this signature in database
GPG Key ID: ACAAD20E19E710E3
4 changed files with 19 additions and 1 deletions

View File

@ -78,6 +78,10 @@
don't. */
#undef HAVE_DECL_GETC_UNLOCKED
/* Define to 1 if you have the declaration of `memmem', and to 0 if you don't.
*/
#undef HAVE_DECL_MEMMEM
/* Define to 1 if you have the declaration of `putchar_unlocked', and to 0 if
you don't. */
#undef HAVE_DECL_PUTCHAR_UNLOCKED

10
fixincludes/configure vendored
View File

@ -5043,6 +5043,16 @@ fi
cat >>confdefs.h <<_ACEOF
#define HAVE_DECL_VASPRINTF $ac_have_decl
_ACEOF
ac_fn_c_check_decl "$LINENO" "memmem" "ac_cv_have_decl_memmem" "$ac_includes_default"
if test "x$ac_cv_have_decl_memmem" = xyes; then :
ac_have_decl=1
else
ac_have_decl=0
fi
cat >>confdefs.h <<_ACEOF
#define HAVE_DECL_MEMMEM $ac_have_decl
_ACEOF
ac_fn_c_check_decl "$LINENO" "clearerr_unlocked" "ac_cv_have_decl_clearerr_unlocked" "$ac_includes_default"
if test "x$ac_cv_have_decl_clearerr_unlocked" = xyes; then :

View File

@ -88,7 +88,7 @@ define(fixincludes_UNLOCKED_FUNCS, clearerr_unlocked feof_unlocked dnl
fread_unlocked fwrite_unlocked getchar_unlocked getc_unlocked dnl
putchar_unlocked putc_unlocked)
AC_CHECK_FUNCS(fixincludes_UNLOCKED_FUNCS)
AC_CHECK_DECLS([abort, asprintf, basename(char *), errno, vasprintf])
AC_CHECK_DECLS([abort, asprintf, basename(char *), errno, vasprintf, memmem])
AC_CHECK_DECLS(m4_split(m4_normalize(fixincludes_UNLOCKED_FUNCS)))
# Checks for typedefs, structures, and compiler characteristics.

View File

@ -209,6 +209,10 @@ extern int errno;
extern void abort (void);
#endif
#if defined (HAVE_DECL_MEMMEM) && !HAVE_DECL_MEMMEM
extern void *memmem (const void *, size_t, const void *, size_t);
#endif
#if HAVE_SYS_STAT_H
# include <sys/stat.h>
#endif