From 0f1ffe0925ef6aff9c56a3a4ca7b84b7411fc2b4 Mon Sep 17 00:00:00 2001 From: Herbert Xu Date: Mon, 24 May 2010 15:31:27 +0800 Subject: [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 --- src/eval.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'src/eval.c') 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; -- cgit 1.4.1