aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2010-05-27 11:50:19 +0800
committermaximilian attems <max@stro.at>2011-06-03 18:44:12 +0200
commitf18701fc6bcb64bb0067bcd9fefaa2510579b37b (patch)
tree47c70fb9d7d624c8489e26d50d36261c30ae60c3
parent72ae21a738fd9b493d2b360869f3e69639bcce0e (diff)
downloadklibc-f18701fc6bcb64bb0067bcd9fefaa2510579b37b.tar.gz
[klibc] [VAR] Do not poplocalvars prematurely on regular utilities
The recent cmdenviron removal broke regular utilities by calling poplocalvars too early. This patch fixes that by postponing the poplocalvars for regular utilities until they have completed. In order to ensure that local still works, it is now a special built-in. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: maximilian attems <max@stro.at>
-rw-r--r--usr/dash/builtins.def.in2
-rw-r--r--usr/dash/eval.c8
2 files changed, 6 insertions, 4 deletions
diff --git a/usr/dash/builtins.def.in b/usr/dash/builtins.def.in
index 7f5f0b568f4b6..e1169632a3432 100644
--- a/usr/dash/builtins.def.in
+++ b/usr/dash/builtins.def.in
@@ -71,7 +71,7 @@ falsecmd -u false
getoptscmd -u getopts
hashcmd hash
jobscmd -u jobs
-localcmd -a local
+localcmd -as local
printfcmd printf
pwdcmd pwd
readcmd -u read
diff --git a/usr/dash/eval.c b/usr/dash/eval.c
index 9c18440745657..d35fe06af9ee6 100644
--- a/usr/dash/eval.c
+++ b/usr/dash/eval.c
@@ -847,9 +847,11 @@ bail:
/* NOTREACHED */
case CMDBUILTIN:
- poplocalvars(spclbltin > 0 || argc == 0);
- if (execcmd && argc > 1)
- listsetvar(varlist.list, VEXPORT);
+ if (spclbltin > 0 || argc == 0) {
+ poplocalvars(1);
+ if (execcmd && argc > 1)
+ listsetvar(varlist.list, VEXPORT);
+ }
if (evalbltin(cmdentry.u.cmd, argc, argv, flags)) {
int status;
int i;