diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2010-05-27 11:50:19 +0800 |
---|---|---|
committer | maximilian attems <max@stro.at> | 2011-06-03 18:44:12 +0200 |
commit | f18701fc6bcb64bb0067bcd9fefaa2510579b37b (patch) | |
tree | 47c70fb9d7d624c8489e26d50d36261c30ae60c3 | |
parent | 72ae21a738fd9b493d2b360869f3e69639bcce0e (diff) | |
download | klibc-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.in | 2 | ||||
-rw-r--r-- | usr/dash/eval.c | 8 |
2 files changed, 6 insertions, 4 deletions
diff --git a/usr/dash/builtins.def.in b/usr/dash/builtins.def.in index 7f5f0b568f4b61..e1169632a3432c 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 9c184407456579..d35fe06af9ee63 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; |