Mercurial > hg > toybox
annotate toys/env.c @ 409:55598a9b8f21
'env' and 'basename' refactored
author | Tryn Mirell <tryn@mirell.org> |
---|---|
date | Fri, 20 Jan 2012 00:02:37 -0600 |
parents | c8a3d740c229 |
children | eda61bcf575a |
rev | line source |
---|---|
406 | 1 /* vi: set sw=4 ts=4: |
2 * env.c | |
3 | |
409
55598a9b8f21
'env' and 'basename' refactored
Tryn Mirell <tryn@mirell.org>
parents:
406
diff
changeset
|
4 USE_ENV(NEWTOY(env, "^i", TOYFLAG_USR|TOYFLAG_BIN)) |
406 | 5 |
6 config ENV | |
7 bool "env" | |
8 default n | |
9 help | |
409
55598a9b8f21
'env' and 'basename' refactored
Tryn Mirell <tryn@mirell.org>
parents:
406
diff
changeset
|
10 usage: env [-i] [FOO=BAR...] [command [option...]] |
55598a9b8f21
'env' and 'basename' refactored
Tryn Mirell <tryn@mirell.org>
parents:
406
diff
changeset
|
11 |
406 | 12 Set the environment for command invocation |
13 */ | |
14 | |
15 #include "toys.h" | |
16 | |
17 extern char **environ; | |
18 | |
19 void env_main(void) | |
20 { | |
21 char **ev; | |
22 char **command = NULL; | |
409
55598a9b8f21
'env' and 'basename' refactored
Tryn Mirell <tryn@mirell.org>
parents:
406
diff
changeset
|
23 char *del = "="; |
55598a9b8f21
'env' and 'basename' refactored
Tryn Mirell <tryn@mirell.org>
parents:
406
diff
changeset
|
24 |
406 | 25 if (toys.optflags & 1) clearenv(); |
26 | |
27 for (ev = toys.optargs; *ev != NULL; ev++) { | |
409
55598a9b8f21
'env' and 'basename' refactored
Tryn Mirell <tryn@mirell.org>
parents:
406
diff
changeset
|
28 char *env, *val = NULL; |
406 | 29 |
30 env = strtok(*ev, del); | |
31 | |
409
55598a9b8f21
'env' and 'basename' refactored
Tryn Mirell <tryn@mirell.org>
parents:
406
diff
changeset
|
32 if (env) val = strtok(NULL, del); |
406 | 33 |
409
55598a9b8f21
'env' and 'basename' refactored
Tryn Mirell <tryn@mirell.org>
parents:
406
diff
changeset
|
34 if (val) setenv(env, val, 1); |
55598a9b8f21
'env' and 'basename' refactored
Tryn Mirell <tryn@mirell.org>
parents:
406
diff
changeset
|
35 else { |
406 | 36 command = ev; |
37 break; | |
38 } | |
39 } | |
40 | |
41 if (!command) { | |
42 char **ep; | |
409
55598a9b8f21
'env' and 'basename' refactored
Tryn Mirell <tryn@mirell.org>
parents:
406
diff
changeset
|
43 for (ep = environ; *ep; ep++) |
55598a9b8f21
'env' and 'basename' refactored
Tryn Mirell <tryn@mirell.org>
parents:
406
diff
changeset
|
44 xputs(*ep); |
55598a9b8f21
'env' and 'basename' refactored
Tryn Mirell <tryn@mirell.org>
parents:
406
diff
changeset
|
45 return; |
55598a9b8f21
'env' and 'basename' refactored
Tryn Mirell <tryn@mirell.org>
parents:
406
diff
changeset
|
46 } else execvp(*command, command); |
406 | 47 } |