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 181a41810bc2e4b39a3aefbae4300ffc0c3bd685..d141db138893c55f3c13575f794817d75b001b7f 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 *));