diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2010-05-24 15:31:27 +0800 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2010-05-26 16:00:06 +0800 |
commit | 0f1ffe0925ef6aff9c56a3a4ca7b84b7411fc2b4 (patch) | |
tree | 704d6ff8aeb71616324b3939f18f9c3524d9496a /src/eval.c | |
parent | [EVAL] Fix command -- crash (diff) | |
download | dash-0f1ffe0925ef6aff9c56a3a4ca7b84b7411fc2b4.tar.gz dash-0f1ffe0925ef6aff9c56a3a4ca7b84b7411fc2b4.zip |
[VAR] Add localvars nesting
This patch adds localvars nesting infrastructure so we can reuse the localvars mechanism for command evaluation. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'src/eval.c')
-rw-r--r-- | src/eval.c | 7 |
1 files changed, 2 insertions, 5 deletions
diff --git a/src/eval.c b/src/eval.c index 62d9d5d..8d2767c 100644 --- a/src/eval.c +++ b/src/eval.c @@ -928,20 +928,17 @@ STATIC int evalfun(struct funcnode *func, int argc, char **argv, int flags) { volatile struct shparam saveparam; - struct localvar *volatile savelocalvars; struct jmploc *volatile savehandler; struct jmploc jmploc; int e; saveparam = shellparam; - savelocalvars = localvars; if ((e = setjmp(jmploc.loc))) { goto funcdone; } INTOFF; savehandler = handler; handler = &jmploc; - localvars = NULL; shellparam.malloc = 0; func->count++; funcnest++; @@ -950,13 +947,13 @@ evalfun(struct funcnode *func, int argc, char **argv, int flags) shellparam.p = argv + 1; shellparam.optind = 1; shellparam.optoff = -1; + pushlocalvars(); evaltree(&func->n, flags & EV_TESTED); + poplocalvars(); funcdone: INTOFF; funcnest--; freefunc(func); - poplocalvars(); - localvars = savelocalvars; freeparam(&shellparam); shellparam = saveparam; handler = savehandler; |