diff options
author | Rob Landley <rob@landley.net> | 2012-08-25 14:25:22 -0500 |
---|---|---|
committer | Rob Landley <rob@landley.net> | 2012-08-25 14:25:22 -0500 |
commit | 3a9241add947cb6d24b5de7a8927517426a78795 (patch) | |
tree | d122ab6570439cd6b17c7d73ed8d4e085e0b8a95 /toys/posix/env.c | |
parent | 689f095bc976417bf50810fe59a3b3ac32b21105 (diff) | |
download | toybox-3a9241add947cb6d24b5de7a8927517426a78795.tar.gz |
Move commands into "posix", "lsb", and "other" menus/directories.
Diffstat (limited to 'toys/posix/env.c')
-rw-r--r-- | toys/posix/env.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/toys/posix/env.c b/toys/posix/env.c new file mode 100644 index 00000000..7cda85f9 --- /dev/null +++ b/toys/posix/env.c @@ -0,0 +1,52 @@ +/* vi: set sw=4 ts=4: + * + * env.c - Set the environment for command invocation. + * + * Copyright 2012 Tryn Mirell <tryn@mirell.org> + * env.c + +USE_ENV(NEWTOY(env, "^i", TOYFLAG_USR|TOYFLAG_BIN)) + +config ENV + bool "env" + default y + help + usage: env [-i] [NAME=VALUE...] [command [option...]] + + Set the environment for command invocation. + + -i Clear existing environment. +*/ + +#include "toys.h" + +extern char **environ; + +void env_main(void) +{ + char **ev; + char **command = NULL; + char *del = "="; + + if (toys.optflags & 1) clearenv(); + + for (ev = toys.optargs; *ev != NULL; ev++) { + char *env, *val = NULL; + + env = strtok(*ev, del); + + if (env) val = strtok(NULL, del); + + if (val) setenv(env, val, 1); + else { + command = ev; + break; + } + } + + if (!command) { + char **ep; + for (ep = environ; *ep; ep++) xputs(*ep); + return; + } else xexec(command); +} |