env: support -uVAR=VAL

function                                             old     new   delta
env_main                                             245     233     -12
This commit is contained in:
Denis Vlasenko 2008-11-11 21:32:39 +00:00
parent 618a3027ed
commit f3c2d13602

View File

@ -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, char **argv) MAIN_EXTERNALLY_VISIBLE;
int env_main(int argc UNUSED_PARAM, char **argv) int env_main(int argc UNUSED_PARAM, char **argv)
{ {
/* cleanenv was static - why? */
char *cleanenv[1];
char **ep; char **ep;
unsigned opt; unsigned opt;
llist_t *unset_env = NULL; llist_t *unset_env = NULL;
@ -60,12 +58,16 @@ int env_main(int argc UNUSED_PARAM, char **argv)
++argv; ++argv;
} }
if (opt & 1) { if (opt & 1) {
cleanenv[0] = NULL; clearenv();
environ = cleanenv; }
} else { while (unset_env) {
while (unset_env) { char *var = llist_pop(&unset_env);
unsetenv(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)) { while (*argv && (strchr(*argv, '=') != NULL)) {