changeset 10456:a821fdd7b2b7

New module 'strdup-posix'.
author Bruno Haible <bruno@clisp.org>
date Sun, 21 Sep 2008 14:54:54 +0200
parents e8f55251d47e
children 85455fe7164d
files ChangeLog MODULES.html.sh doc/posix-functions/strdup.texi lib/string.in.h m4/strdup.m4 m4/string_h.m4 modules/getpass modules/strdup modules/strdup-posix modules/string
diffstat 10 files changed, 81 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2008-09-21  Bruno Haible  <bruno@clisp.org>
+
+	* modules/getpass (Depends-on): Add strdup-posix.
+
+	New module 'strdup-posix'.
+	* modules/strdup-posix: New file.
+	* m4/strdup.m4 (gl_FUNC_STRDUP_POSIX): New macro.
+	* lib/string.in.h (strdup): Replace if REPLACE_STRDUP is 1.
+	* m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): Initialize
+	REPLACE_STRDUP.
+	* modules/string (Makefile.am): Substitute REPLACE_STRDUP.
+	* doc/posix-functions/strdup.texi: Mention module strdup-posix.
+	* MODULES.html.sh (Support for systems lacking POSIX:2001): Add
+	strdup-posix.
+
+	* modules/strdup (Depends-on): Remove malloc-posix.
+
 2008-09-20  Bruno Haible  <bruno@clisp.org>
 
 	* lib/fstrcmp.c: Add data about branch probabilities, from Ralf
--- a/MODULES.html.sh
+++ b/MODULES.html.sh
@@ -2121,6 +2121,7 @@
   func_module sleep
   func_module snprintf-posix
   func_module sprintf-posix
+  func_module strdup-posix
   func_module string
   func_module strings
   func_module tempname
--- a/doc/posix-functions/strdup.texi
+++ b/doc/posix-functions/strdup.texi
@@ -4,9 +4,9 @@
 
 POSIX specification: @url{http://www.opengroup.org/susv3xsh/strdup.html}
 
-Gnulib module: strdup
+Gnulib module: strdup or strdup-posix
 
-Portability problems fixed by Gnulib:
+Portability problems fixed by either Gnulib module @code{strdup} or @code{strdup-posix}:
 @itemize
 @item
 This function is missing on some old platforms.
@@ -14,10 +14,14 @@
 This function has no prototype in @code{<string.h>} on some old platforms.
 @end itemize
 
-Portability problems not fixed by Gnulib:
+Portability problems fixed by Gnulib module @code{strdup-posix}:
 @itemize
 @item
 Upon failure, the function does not set @code{errno} to @code{ENOMEM} on
 some platforms:
 mingw.
 @end itemize
+
+Portability problems not fixed by Gnulib:
+@itemize
+@end itemize
--- a/lib/string.in.h
+++ b/lib/string.in.h
@@ -167,7 +167,11 @@
 
 /* Duplicate S, returning an identical malloc'd string.  */
 #if @GNULIB_STRDUP@
-# if ! @HAVE_DECL_STRDUP@ && ! defined strdup
+# if @REPLACE_STRDUP@
+#  undef strdup
+#  define strdup rpl_strdup
+# endif
+# if !(@HAVE_DECL_STRDUP@ || defined strdup) || @REPLACE_STRDUP@
 extern char *strdup (char const *__s);
 # endif
 #elif defined GNULIB_POSIXCHECK
--- a/m4/strdup.m4
+++ b/m4/strdup.m4
@@ -1,7 +1,6 @@
-# strdup.m4 serial 9
+# strdup.m4 serial 10
 
-dnl Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Free Software
-dnl Foundation, Inc.
+dnl Copyright (C) 2002-2008 Free Software Foundation, Inc.
 
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -18,5 +17,22 @@
   gl_PREREQ_STRDUP
 ])
 
+AC_DEFUN([gl_FUNC_STRDUP_POSIX],
+[
+  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+  AC_REQUIRE([gl_CHECK_MALLOC_POSIX])
+  if test $gl_cv_func_malloc_posix != yes; then
+    REPLACE_STRDUP=1
+    AC_LIBOBJ([strdup])
+  else
+    AC_REPLACE_FUNCS(strdup)
+  fi
+  AC_CHECK_DECLS_ONCE(strdup)
+  if test $ac_cv_have_decl_strdup = no; then
+    HAVE_DECL_STRDUP=0
+  fi
+  gl_PREREQ_STRDUP
+])
+
 # Prerequisites of lib/strdup.c.
 AC_DEFUN([gl_PREREQ_STRDUP], [:])
--- a/m4/string_h.m4
+++ b/m4/string_h.m4
@@ -5,7 +5,7 @@
 # gives unlimited permission to copy and/or distribute it,
 # with or without modifications, as long as this notice is preserved.
 
-# serial 5
+# serial 6
 
 # Written by Paul Eggert.
 
@@ -83,9 +83,10 @@
   HAVE_DECL_STRERROR=1;		AC_SUBST([HAVE_DECL_STRERROR])
   HAVE_DECL_STRSIGNAL=1;	AC_SUBST([HAVE_DECL_STRSIGNAL])
   HAVE_STRVERSCMP=1;		AC_SUBST([HAVE_STRVERSCMP])
+  REPLACE_MEMMEM=0;		AC_SUBST([REPLACE_MEMMEM])
+  REPLACE_STRDUP=0;		AC_SUBST([REPLACE_STRDUP])
+  REPLACE_STRSTR=0;		AC_SUBST([REPLACE_STRSTR])
+  REPLACE_STRCASESTR=0;		AC_SUBST([REPLACE_STRCASESTR])
   REPLACE_STRERROR=0;		AC_SUBST([REPLACE_STRERROR])
   REPLACE_STRSIGNAL=0;		AC_SUBST([REPLACE_STRSIGNAL])
-  REPLACE_MEMMEM=0;		AC_SUBST([REPLACE_MEMMEM])
-  REPLACE_STRCASESTR=0;		AC_SUBST([REPLACE_STRCASESTR])
-  REPLACE_STRSTR=0;		AC_SUBST([REPLACE_STRSTR])
 ])
--- a/modules/getpass
+++ b/modules/getpass
@@ -10,6 +10,7 @@
 fseeko
 getline
 stdbool
+strdup-posix
 
 configure.ac:
 gl_FUNC_GETPASS
--- a/modules/strdup
+++ b/modules/strdup
@@ -7,7 +7,6 @@
 
 Depends-on:
 string
-malloc-posix
 
 configure.ac:
 gl_FUNC_STRDUP
new file mode 100644
--- /dev/null
+++ b/modules/strdup-posix
@@ -0,0 +1,25 @@
+Description:
+strdup() function: duplicate a string.
+
+Files:
+lib/strdup.c
+m4/strdup.m4
+
+Depends-on:
+string
+malloc-posix
+
+configure.ac:
+gl_FUNC_STRDUP_POSIX
+gl_STRING_MODULE_INDICATOR([strdup])
+
+Makefile.am:
+
+Include:
+<string.h>
+
+License:
+LGPLv2+
+
+Maintainer:
+all, glibc
--- a/modules/string
+++ b/modules/string
@@ -76,6 +76,7 @@
 	      -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \
 	      -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \
 	      -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \
+	      -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \
 	      -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \
 	      -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \
 	      -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \