summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Vlasenko2008-11-11 21:32:39 +0000
committerDenis Vlasenko2008-11-11 21:32:39 +0000
commitf3c2d1360222f54126e5b0322ae4f8c1853e4782 (patch)
tree922edc5329bfbc6be1fefce85b8f95daea70cf7d
parent618a3027edbfd42e52bfd7680cd24affe7a29b4c (diff)
downloadbusybox-f3c2d1360222f54126e5b0322ae4f8c1853e4782.zip
busybox-f3c2d1360222f54126e5b0322ae4f8c1853e4782.tar.gz
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 2f8c8b7..f50a03e 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)) {