diff options
author | Rich Felker <dalias@aerifal.cx> | 2012-10-21 18:37:15 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2012-10-21 18:37:15 -0400 |
commit | 31a55f233b313030a787240b76c06f2d08cde29f (patch) | |
tree | 251b191eecac47f9ca026a00675fb5563ae7e753 | |
parent | 8489897e01b8a27c365c9c98b200ee25dc124cb4 (diff) | |
download | musl-31a55f233b313030a787240b76c06f2d08cde29f.tar.gz musl-31a55f233b313030a787240b76c06f2d08cde29f.tar.xz musl-31a55f233b313030a787240b76c06f2d08cde29f.zip |
as an extension, have putenv("VAR") behave as unsetenv("VAR")
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.
-rw-r--r-- | src/env/putenv.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/env/putenv.c b/src/env/putenv.c index 181a4181..d141db13 100644 --- a/src/env/putenv.c +++ b/src/env/putenv.c @@ -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 *)); |