env: support -uVAR=VAL
function old new delta env_main 245 233 -12
This commit is contained in:
parent
618a3027ed
commit
f3c2d13602
@ -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) {
|
|
||||||
unsetenv(llist_pop(&unset_env));
|
|
||||||
}
|
}
|
||||||
|
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)) {
|
while (*argv && (strchr(*argv, '=') != NULL)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user