Mercurial > hg > toybox
changeset 406:c8a3d740c229
'env' implementation - Initial
author | Tryn Mirell <tryn@mirell.org> |
---|---|
date | Mon, 16 Jan 2012 01:48:51 -0600 |
parents | a8b14410e784 |
children | b8390ededd02 |
files | toys/env.c |
diffstat | 1 files changed, 52 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/toys/env.c Mon Jan 16 01:48:51 2012 -0600 @@ -0,0 +1,52 @@ +/* vi: set sw=4 ts=4: + * env.c + +USE_ENV(NEWTOY(env, "^?i", TOYFLAG_USR|TOYFLAG_BIN)) + +config ENV + bool "env" + default n + help + + Set the environment for command invocation +*/ + +#include "toys.h" + +extern char **environ; + +void env_main(void) +{ + char **ev; + char **command = NULL; + + if (toys.optflags & 1) clearenv(); + + for (ev = toys.optargs; *ev != NULL; ev++) { + char *env = NULL, *val = NULL; + char *del = "="; + + env = strtok(*ev, del); + + if (env != NULL) val = strtok(NULL, del); + + if (val != NULL) { + setenv(env, val, 1); + } else { + command = ev; + break; + } + } + + if (!command) { + char **ep; + if (environ) { + for (ep = environ; *ep != NULL; ep++) + xputs(*ep); + return; + } + } else { + execvp(*command, command); + } + +}