changeset 14613:2683cd2b0569

strnlen: Avoid memchr related link error on old obsolete platforms. * modules/memchr-obsolete: New file. * m4/memchr-obsolete.m4: New file. * m4/memchr.m4 (gl_FUNC_MEMCHR): Don't check whether memchr exists if gl_FUNC_MEMCHR_OBSOLETE is not also defined. * modules/memchr (Depends-on): Add memchr-obsolete. * modules/strnlen (Depends-on): Likewise. * doc/posix-functions/memchr.texi: Mention module memchr-obsolete.
author Bruno Haible <bruno@clisp.org>
date Mon, 25 Apr 2011 19:43:59 +0200
parents 6ef4f1f39105
children 284da5defc58
files ChangeLog doc/posix-functions/memchr.texi m4/memchr-obsolete.m4 m4/memchr.m4 modules/memchr modules/memchr-obsolete modules/strnlen
diffstat 7 files changed, 70 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2011-04-25  Bruno Haible  <bruno@clisp.org>
+
+	strnlen: Avoid memchr related link error on old obsolete platforms.
+	* modules/memchr-obsolete: New file.
+	* m4/memchr-obsolete.m4: New file.
+	* m4/memchr.m4 (gl_FUNC_MEMCHR): Don't check whether memchr exists if
+	gl_FUNC_MEMCHR_OBSOLETE is not also defined.
+	* modules/memchr (Depends-on): Add memchr-obsolete.
+	* modules/strnlen (Depends-on): Likewise.
+	* doc/posix-functions/memchr.texi: Mention module memchr-obsolete.
+
 2011-04-25  Jim Meyering  <meyering@redhat.com>
 
 	maint.mk: makefile_at_at_check extend and clean up
--- a/doc/posix-functions/memchr.texi
+++ b/doc/posix-functions/memchr.texi
@@ -4,18 +4,21 @@
 
 POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/memchr.html}
 
-Gnulib module: memchr
+Gnulib module: memchr or memchr-obsolete
 
-Portability problems fixed by Gnulib:
+Portability problems fixed by either Gnulib module @code{memchr} or @code{memchr-obsolete}:
 @itemize
 @item
-This function is missing on some older platforms.
-
-@item
 This function dereferences too much memory on some platforms:
 glibc 2.10 on x86_64, IA-64; glibc 2.11 on Alpha.
 @end itemize
 
+Portability problems fixed by Gnulib module @code{memchr-obsolete}:
+@itemize
+@item
+This function is missing on some older platforms.
+@end itemize
+
 Portability problems not fixed by Gnulib:
 @itemize
 @end itemize
new file mode 100644
--- /dev/null
+++ b/m4/memchr-obsolete.m4
@@ -0,0 +1,11 @@
+# memchr-obsolete.m4 serial 1
+dnl Copyright (C) 2011 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.
+
+AC_DEFUN([gl_FUNC_MEMCHR_OBSOLETE],
+[
+  dnl The real code is in memchr.m4.
+  :
+])
--- a/m4/memchr.m4
+++ b/m4/memchr.m4
@@ -1,4 +1,4 @@
-# memchr.m4 serial 10
+# memchr.m4 serial 11
 dnl Copyright (C) 2002-2004, 2009-2011 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -11,10 +11,16 @@
   AC_CHECK_HEADERS_ONCE([sys/mman.h])
   AC_CHECK_FUNCS_ONCE([mprotect])
 
-  dnl These days, we assume memchr is present.  But just in case...
   AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
-  AC_CHECK_FUNCS_ONCE([memchr])
-  if test $ac_cv_func_memchr = yes; then
+  m4_ifdef([gl_FUNC_MEMCHR_OBSOLETE], [
+    dnl These days, we assume memchr is present.  But if support for old
+    dnl platforms is desired:
+    AC_CHECK_FUNCS_ONCE([memchr])
+    if test $ac_cv_func_memchr = no; then
+      HAVE_MEMCHR=0
+    fi
+  ])
+  if test $HAVE_MEMCHR = 1; then
     # Detect platform-specific bugs in some versions of glibc:
     # memchr should not dereference anything with length 0
     #   http://bugzilla.redhat.com/499689
@@ -73,8 +79,6 @@
     if test "$gl_cv_func_memchr_works" != yes; then
       REPLACE_MEMCHR=1
     fi
-  else
-    HAVE_MEMCHR=0
   fi
   if test $HAVE_MEMCHR = 0 || test $REPLACE_MEMCHR = 1; then
     AC_LIBOBJ([memchr])
--- a/modules/memchr
+++ b/modules/memchr
@@ -10,6 +10,7 @@
 Depends-on:
 extensions
 string
+memchr-obsolete
 
 configure.ac:
 gl_FUNC_MEMCHR
new file mode 100644
--- /dev/null
+++ b/modules/memchr-obsolete
@@ -0,0 +1,28 @@
+Description:
+memchr() function for old platforms.
+
+Status:
+obsolete
+
+Notice:
+This module is obsolete.
+
+Files:
+m4/memchr-obsolete.m4
+
+Depends-on:
+memchr
+
+configure.ac:
+gl_FUNC_MEMCHR_OBSOLETE
+
+Makefile.am:
+
+Include:
+<string.h>
+
+License:
+LGPLv2+
+
+Maintainer:
+Bruno Haible
--- a/modules/strnlen
+++ b/modules/strnlen
@@ -8,6 +8,7 @@
 Depends-on:
 extensions
 string
+memchr-obsolete
 
 configure.ac:
 gl_FUNC_STRNLEN