aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2008-11-11 21:32:39 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2008-11-11 21:32:39 +0000
commitf3c2d1360222f54126e5b0322ae4f8c1853e4782 (patch)
tree922edc5329bfbc6be1fefce85b8f95daea70cf7d
parent618a3027edbfd42e52bfd7680cd24affe7a29b4c (diff)
downloadbusybox-w32-f3c2d1360222f54126e5b0322ae4f8c1853e4782.tar.gz
busybox-w32-f3c2d1360222f54126e5b0322ae4f8c1853e4782.tar.bz2
busybox-w32-f3c2d1360222f54126e5b0322ae4f8c1853e4782.zip
env: support -uVAR=VAL
function old new delta env_main 245 233 -12
-rw-r--r--coreutils/env.c18
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 =
43int env_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; 43int env_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
44int env_main(int argc UNUSED_PARAM, char **argv) 44int env_main(int argc UNUSED_PARAM, char **argv)
45{ 45{
46 /* cleanenv was static - why? */
47 char *cleanenv[1];
48 char **ep; 46 char **ep;
49 unsigned opt; 47 unsigned opt;
50 llist_t *unset_env = NULL; 48 llist_t *unset_env = NULL;
@@ -60,12 +58,16 @@ int env_main(int argc UNUSED_PARAM, char **argv)
60 ++argv; 58 ++argv;
61 } 59 }
62 if (opt & 1) { 60 if (opt & 1) {
63 cleanenv[0] = NULL; 61 clearenv();
64 environ = cleanenv; 62 }
65 } else { 63 while (unset_env) {
66 while (unset_env) { 64 char *var = llist_pop(&unset_env);
67 unsetenv(llist_pop(&unset_env)); 65 /* This does not handle -uVAR=VAL
68 } 66 * (coreutils _sets_ the variable in that case): */
67 /*unsetenv(var);*/
68 /* This does, but uses somewhan undocumented feature that
69 * putenv("name_without_equal_sign") unsets the variable: */
70 putenv(var);
69 } 71 }
70 72
71 while (*argv && (strchr(*argv, '=') != NULL)) { 73 while (*argv && (strchr(*argv, '=') != NULL)) {