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>
This commit is contained in:
parent
484fc2056d
commit
85241c7b0b
10
shell/ash.c
10
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"
|
||||
|
Loading…
Reference in New Issue
Block a user