diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2008-11-12 00:32:39 +0300 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2008-11-12 00:32:39 +0300 |
commit | f3c2d1360222f54126e5b0322ae4f8c1853e4782 (patch) | |
tree | 922edc5329bfbc6be1fefce85b8f95daea70cf7d /coreutils/env.c | |
parent | 618a3027edbfd42e52bfd7680cd24affe7a29b4c (diff) |
env: support -uVAR=VAL
function old new delta
env_main 245 233 -12
Diffstat (limited to 'coreutils/env.c')
-rw-r--r-- | coreutils/env.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/coreutils/env.c b/coreutils/env.c index 2f8c8b71d..f50a03e8b 100644 --- a/coreutils/env.c +++ b/coreutils/env.c @@ -43,8 +43,6 @@ static const char env_longopts[] ALIGN1 = int env_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; int env_main(int argc UNUSED_PARAM, char **argv) { - /* cleanenv was static - why? */ - char *cleanenv[1]; char **ep; unsigned opt; llist_t *unset_env = NULL; @@ -60,12 +58,16 @@ int env_main(int argc UNUSED_PARAM, char **argv) ++argv; } if (opt & 1) { - cleanenv[0] = NULL; - environ = cleanenv; - } else { - while (unset_env) { - unsetenv(llist_pop(&unset_env)); - } + clearenv(); + } + while (unset_env) { + char *var = llist_pop(&unset_env); + /* This does not handle -uVAR=VAL + * (coreutils _sets_ the variable in that case): */ + /*unsetenv(var);*/ + /* This does, but uses somewhan undocumented feature that + * putenv("name_without_equal_sign") unsets the variable: */ + putenv(var); } while (*argv && (strchr(*argv, '=') != NULL)) { |