unsetenv: fix OpenBSD bug
authorEric Blake <eblake@redhat.com>
Wed, 8 Sep 2010 19:43:51 +0000 (13:43 -0600)
committerEric Blake <eblake@redhat.com>
Wed, 8 Sep 2010 20:02:42 +0000 (14:02 -0600)
* m4/setenv.m4 (gl_FUNC_UNSETENV): Check for OpenBSD bug.
* doc/posix-functions/unsetenv.texi (unsetenv): Update
documentation.
Reported by Jim Meyering.

Signed-off-by: Eric Blake <eblake@redhat.com>
ChangeLog
doc/posix-functions/unsetenv.texi
m4/setenv.m4

index 9fb8803..82937ac 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
 2010-09-08  Eric Blake  <eblake@redhat.com>
 
+       unsetenv: fix OpenBSD bug
+       * m4/setenv.m4 (gl_FUNC_UNSETENV): Check for OpenBSD bug.
+       * doc/posix-functions/unsetenv.texi (unsetenv): Update
+       documentation.
+       Reported by Jim Meyering.
+
        strtod: work around IRIX 6.5 bug
        * lib/strtod.c (strtod): Reparse number on shorter string if
        exponent parse was invalid.
index 8a683f5..56819bb 100644 (file)
@@ -4,7 +4,7 @@
 
 POSIX specification:@* @url{http://www.opengroup.org/onlinepubs/9699919799/functions/unsetenv.html}
 
-Gnulib module: setenv
+Gnulib module: unsetenv
 
 Portability problems fixed by Gnulib:
 @itemize
@@ -18,7 +18,7 @@ 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 an empty string or a string containing @samp{=}:
-FreeBSD 6.0, NetBSD 1.6, OpenBSD 3.8.
+FreeBSD 6.0, NetBSD 1.6, OpenBSD 4.7.
 @item
 This function removes only the first value association for the given
 environment variable, not all of them, on some platforms:
index 5a800d3..de7171e 100644 (file)
@@ -1,4 +1,4 @@
-# setenv.m4 serial 17
+# setenv.m4 serial 18
 dnl Copyright (C) 2001-2004, 2006-2010 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -78,10 +78,12 @@ int unsetenv();
     fi
 
     dnl Solaris 10 unsetenv does not remove all copies of a name.
-    AC_CACHE_CHECK([whether unsetenv works on duplicates],
+    dnl OpenBSD 4.7 unsetenv("") does not fail.
+    AC_CACHE_CHECK([whether unsetenv obeys POSIX],
       [gl_cv_func_unsetenv_works],
       [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
        #include <stdlib.h>
+       #include <errno.h>
       ]], [[
        char entry[] = "b=2";
        if (putenv ((char *) "a=1")) return 1;
@@ -89,6 +91,7 @@ int unsetenv();
        entry[0] = 'a';
        unsetenv ("a");
        if (getenv ("a")) return 3;
+       if (!unsetenv ("") || errno != EINVAL) return 4;
       ]])],
       [gl_cv_func_unsetenv_works=yes], [gl_cv_func_unsetenv_works=no],
       [gl_cv_func_unsetenv_works="guessing no"])])