diff options
author | Eric Blake <ebb9@byu.net> | 2009-12-10 12:18:31 -0700 |
---|---|---|
committer | Eric Blake <ebb9@byu.net> | 2009-12-11 13:57:28 -0700 |
commit | 91e21656de5ae1e87d23465ce46e738be45a7254 (patch) | |
tree | 26245d771735e0a0ae14408abcdce507cff8e7ee | |
parent | a3255b1b9848874572e0df9d0609e263da50de4b (diff) | |
download | gnulib-91e21656de5ae1e87d23465ce46e738be45a7254.tar.gz |
setenv: relax requirement in light of POSIX ruling
Requiring that {un,}setenv gracefully reject NULL is just a waste
of processing power; POSIX agreed to this argument in
http://austingroupbugs.net/view.php?id=185
so we no longer worry whether a native implementation handles NULL.
* m4/setenv.m4 (gl_FUNC_SETENV_SEPARATE): Test handling of "" but
not NULL.
* tests/test-setenv.c (main): Relax test.
* tests/test-unsetenv.c (main): Likewise.
* doc/posix-functions/setenv.texi (setenv): Document this.
* doc/posix-functions/unsetenv.texi (unsetenv): Likewise.
Signed-off-by: Eric Blake <ebb9@byu.net>
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | doc/posix-functions/setenv.texi | 6 | ||||
-rw-r--r-- | doc/posix-functions/unsetenv.texi | 6 | ||||
-rw-r--r-- | m4/setenv.m4 | 4 | ||||
-rw-r--r-- | tests/test-setenv.c | 4 | ||||
-rw-r--r-- | tests/test-unsetenv.c | 4 |
6 files changed, 30 insertions, 4 deletions
@@ -1,3 +1,13 @@ +2009-12-11 Eric Blake <ebb9@byu.net> + + setenv: relax requirement in light of POSIX ruling + * m4/setenv.m4 (gl_FUNC_SETENV_SEPARATE): Test handling of "" but + not NULL. + * tests/test-setenv.c (main): Relax test. + * tests/test-unsetenv.c (main): Likewise. + * doc/posix-functions/setenv.texi (setenv): Document this. + * doc/posix-functions/unsetenv.texi (unsetenv): Likewise. + 2009-12-11 Bruno Haible <bruno@clisp.org> New module 'fd-safer-flag'. diff --git a/doc/posix-functions/setenv.texi b/doc/posix-functions/setenv.texi index 87c9e2d7cc..279ae14a54 100644 --- a/doc/posix-functions/setenv.texi +++ b/doc/posix-functions/setenv.texi @@ -13,7 +13,7 @@ This function is missing on some platforms: AIX 4.3.2, HP-UX 11, IRIX 6.5, Solaris 9, mingw, BeOS. @item On some platforms, this function does not fail with @samp{EINVAL} when -passed a null pointer, an empty string, or a string containing @samp{=}: +passed an empty string or a string containing @samp{=}: FreeBSD 6.0, NetBSD 1.6, OpenBSD 3.8, Cygwin 1.5.x. @item On some platforms, this function removes a leading @samp{=} from the @@ -23,4 +23,8 @@ Cygwin 1.5.x. Portability problems not fixed by Gnulib: @itemize +@item +Older versions of POSIX required that @code{setenv(NULL,"",0)} gracefully +fail with @code{EINVAL}, but not all implementations guarantee this, +and the requirement was removed. @end itemize diff --git a/doc/posix-functions/unsetenv.texi b/doc/posix-functions/unsetenv.texi index 99a5e69527..80b17048cb 100644 --- a/doc/posix-functions/unsetenv.texi +++ b/doc/posix-functions/unsetenv.texi @@ -17,7 +17,7 @@ platforms: MacOS X 10.3, FreeBSD 6.0, NetBSD 1.6, OpenBSD 3.8, OSF/1 5.1. @item On some platforms, this function does not fail with @samp{EINVAL} when -passed a null pointer, an empty string, or a string containing @samp{=}: +passed an empty string or a string containing @samp{=}: FreeBSD 6.0, NetBSD 1.6, OpenBSD 3.8. @item This function removes only the first value association for the given @@ -27,4 +27,8 @@ Solaris 10. Portability problems not fixed by Gnulib: @itemize +@item +Older versions of POSIX required that @code{unsetenv(NULL)} gracefully +fail with @code{EINVAL}, but not all implementations guarantee this, +and the requirement was removed. @end itemize diff --git a/m4/setenv.m4 b/m4/setenv.m4 index a5df034aa6..29e6866742 100644 --- a/m4/setenv.m4 +++ b/m4/setenv.m4 @@ -1,4 +1,4 @@ -# setenv.m4 serial 13 +# setenv.m4 serial 14 dnl Copyright (C) 2001-2004, 2006-2009 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -26,7 +26,7 @@ AC_DEFUN([gl_FUNC_SETENV_SEPARATE], #include <stdlib.h> #include <errno.h> ]], [[ - if (setenv (NULL, "", 0) != -1) return 1; + if (setenv ("", "", 0) != -1) return 1; if (errno != EINVAL) return 2; if (setenv ("a", "=", 1) != 0) return 3; if (strcmp (getenv ("a"), "=") != 0) return 4; diff --git a/tests/test-setenv.c b/tests/test-setenv.c index 61be8381bc..eb1fe3336f 100644 --- a/tests/test-setenv.c +++ b/tests/test-setenv.c @@ -52,9 +52,13 @@ main (void) errno = 0; ASSERT (setenv ("a=b", "", 0) == -1); ASSERT (errno == EINVAL); +#if 0 + /* glibc and gnulib's implementation guarantee this, but POSIX no + longer requires it: http://austingroupbugs.net/view.php?id=185 */ errno = 0; ASSERT (setenv (NULL, "", 0) == -1); ASSERT (errno == EINVAL); +#endif return 0; } diff --git a/tests/test-unsetenv.c b/tests/test-unsetenv.c index 11af82c991..2815cf3a39 100644 --- a/tests/test-unsetenv.c +++ b/tests/test-unsetenv.c @@ -57,9 +57,13 @@ main (void) errno = 0; ASSERT (unsetenv ("a=b") == -1); ASSERT (errno == EINVAL); +#if 0 + /* glibc and gnulib's implementation guarantee this, but POSIX no + longer requires it: http://austingroupbugs.net/view.php?id=185 */ errno = 0; ASSERT (unsetenv (NULL) == -1); ASSERT (errno == EINVAL); +#endif return 0; } |