From 1e77f70a1d94a345892ddf88f9e46de1c5c91a48 Mon Sep 17 00:00:00 2001 From: izabera Date: Wed, 10 Feb 2016 01:26:01 +0100 Subject: implement env -u --- toys/posix/env.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'toys/posix/env.c') diff --git a/toys/posix/env.c b/toys/posix/env.c index 87c25a01..c2fc5cf3 100644 --- a/toys/posix/env.c +++ b/toys/posix/env.c @@ -4,36 +4,45 @@ * * http://opengroup.org/onlinepubs/9699919799/utilities/env.html -USE_ENV(NEWTOY(env, "^i", TOYFLAG_USR|TOYFLAG_BIN)) +USE_ENV(NEWTOY(env, "^iu*", TOYFLAG_USR|TOYFLAG_BIN)) config ENV bool "env" default y help - usage: env [-i] [NAME=VALUE...] [command [option...]] + usage: env [-i] [-u NAME] [NAME=VALUE...] [command [option...]] Set the environment for command invocation. -i Clear existing environment. + -u NAME Remove NAME from the environment */ +#define FOR_env #include "toys.h" +GLOBALS( + struct arg_list *u; +); + extern char **environ; void env_main(void) { char **ev; - if (toys.optflags) clearenv(); + if (toys.optflags & FLAG_i) clearenv(); + while (TT.u) { + unsetenv(TT.u->arg); + TT.u = TT.u->next; + } for (ev = toys.optargs; *ev; ev++) { char *name = *ev, *val = strchr(name, '='); if (val) { *(val++) = 0; - if (*val) setenv(name, val, 1); - else unsetenv(name); + setenv(name, val, 1); } else xexec(ev); } -- cgit v1.2.3