diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2017-07-26 20:00:08 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2017-07-26 20:33:51 +0200 |
commit | 85241c7b0b4558f405f7e633ad62520299b8396d (patch) | |
tree | 2193a2a3df5a0a26c8bc0f74d6a0796628d82573 | |
parent | 484fc2056df8a82acabc70386eeb6d0da4982fec (diff) |
ash: [VAR] Do not poplocalvars prematurely on regular utilities
Upstream commit:
Date: Thu, 27 May 2010 11:50:19 +0800
[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: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | shell/ash.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/shell/ash.c b/shell/ash.c index f7fc18f0d..3604af4fc 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -9539,7 +9539,7 @@ static const struct builtincmd builtintab[] = { #if ENABLE_FEATURE_SH_MATH { BUILTIN_NOSPEC "let" , letcmd }, #endif - { BUILTIN_ASSIGN "local" , localcmd }, + { BUILTIN_SPEC_REG_ASSG "local" , localcmd }, #if ENABLE_ASH_PRINTF { BUILTIN_REGULAR "printf" , printfcmd }, #endif @@ -9849,9 +9849,11 @@ evalcommand(union node *cmd, int flags) /* NOTREACHED */ } /* default */ case CMDBUILTIN: - poplocalvars(spclbltin > 0 || argc == 0); - if (cmd_is_exec && argc > 1) - listsetvar(varlist.list, VEXPORT); + if (spclbltin > 0 || argc == 0) { + poplocalvars(1); + if (cmd_is_exec && argc > 1) + listsetvar(varlist.list, VEXPORT); + } /* Tight loop with builtins only: * "while kill -0 $child; do true; done" |