aboutsummaryrefslogtreecommitdiff
path: root/toys/posix/env.c
diff options
context:
space:
mode:
Diffstat (limited to 'toys/posix/env.c')
-rw-r--r--toys/posix/env.c15
1 files changed, 4 insertions, 11 deletions
diff --git a/toys/posix/env.c b/toys/posix/env.c
index d1bb580d..3a251334 100644
--- a/toys/posix/env.c
+++ b/toys/posix/env.c
@@ -40,18 +40,11 @@ void env_main(void)
}
if (FLAG(i)) xclearenv();
- else for (u = TT.u; u; u = u->next)
- if (strchr(u->arg, '=')) error_msg("bad -u %s", u->arg);
- else xsetenv(u->arg, 0);
+ else for (u = TT.u; u; u = u->next) xunsetenv(u->arg);
- for (; *ev; ev++) {
- char *val = strchr(*ev, '=');
-
- if (val) {
- *(val++) = 0;
- xsetenv(*ev, val);
- } else xexec(ev);
- }
+ for (; *ev; ev++)
+ if (strchr(*ev, '=')) xsetenv(xstrdup(*ev), 0);
+ else xexec(ev);
for (ev = environ; *ev; ev++) xprintf("%s%c", *ev, '\n'*!FLAG(0));
}