as an extension, have putenv("VAR") behave as unsetenv("VAR")
authorRich Felker <dalias@aerifal.cx>
Sun, 21 Oct 2012 22:37:15 +0000 (18:37 -0400)
committerRich Felker <dalias@aerifal.cx>
Sun, 21 Oct 2012 22:37:15 +0000 (18:37 -0400)
the behavior of putenv is left undefined if the argument does not
contain an equal sign, but traditional implementations behave this way
and gnulib replaces putenv if it doesn't do this.

src/env/putenv.c

index 181a418..d141db1 100644 (file)
@@ -9,14 +9,14 @@ char **__env_map;
 int __putenv(char *s, int a)
 {
        int i=0, j=0;
-       char *end = strchr(s, '=');
-       size_t l = end-s+1;
+       char *z = strchr(s, '=');
        char **newenv = 0;
        char **newmap = 0;
        static char **oldenv;
-       
-       if (!end || l == 1) return -1;
-       for (; __environ[i] && memcmp(s, __environ[i], l); i++);
+
+       if (!z) return unsetenv(s);
+       if (z==s) return -1;
+       for (; __environ[i] && memcmp(s, __environ[i], z-s+1); i++);
        if (a) {
                if (!__env_map) {
                        __env_map = calloc(2, sizeof(char *));