Simon Josefsson wrote: > right now strdup doesn't make sure ENOMEM is supported, and it seems > unclear whether the modules that depend on strdup actually require that > behaviour from the strdup module. So as far as I can tell there is no > reason for the explicit dependency today.
At least one module, getpass, requires strdup to set errno, because getpass() is documented to let the user distinguish among various failures [1]. [1] http://opengroup.org/onlinepubs/007908775/xsh/getpass.html I'm therefore adding a new module 'strdup-posix', and make 'getpass' depend on it. 2008-09-21 Bruno Haible <[EMAIL PROTECTED]> * 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. ======================= modules/strdup-posix ============================= 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 ========================================================================== --- MODULES.html.sh.orig 2008-09-21 14:44:44.000000000 +0200 +++ MODULES.html.sh 2008-09-21 14:29:37.000000000 +0200 @@ -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 --- doc/posix-functions/strdup.texi.orig 2008-09-21 14:44:44.000000000 +0200 +++ doc/posix-functions/strdup.texi 2008-09-21 14:27:51.000000000 +0200 @@ -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: [EMAIL PROTECTED] [EMAIL PROTECTED] itemize --- lib/string.in.h.orig 2008-09-21 14:44:44.000000000 +0200 +++ lib/string.in.h 2008-09-21 14:23:01.000000000 +0200 @@ -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 --- m4/strdup.m4.orig 2008-09-21 14:44:44.000000000 +0200 +++ m4/strdup.m4 2008-09-21 14:38:20.000000000 +0200 @@ -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], [:]) --- m4/string_h.m4.orig 2008-09-21 14:44:44.000000000 +0200 +++ m4/string_h.m4 2008-09-21 14:25:10.000000000 +0200 @@ -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_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_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]) ]) --- modules/getpass.orig 2008-09-21 14:44:44.000000000 +0200 +++ modules/getpass 2008-09-21 14:26:06.000000000 +0200 @@ -10,6 +10,7 @@ fseeko getline stdbool +strdup-posix configure.ac: gl_FUNC_GETPASS --- modules/strdup.orig 2008-09-21 14:44:44.000000000 +0200 +++ modules/strdup 2008-09-21 14:30:54.000000000 +0200 @@ -7,7 +7,6 @@ Depends-on: string -malloc-posix configure.ac: gl_FUNC_STRDUP --- modules/string.orig 2008-09-21 14:44:44.000000000 +0200 +++ modules/string 2008-09-21 14:23:37.000000000 +0200 @@ -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' \