aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2011-07-09 22:05:22 +0800
committermaximilian attems <max@stro.at>2012-07-02 10:45:36 +0200
commit21b878467fc1d46f8155e0f5ada315d741869262 (patch)
treead5b6b703f7c09bd21c92c05311fa23d334698b0
parent973826c37ec8492514a8dae5b507d0873ee5afb2 (diff)
downloadklibc-21b878467fc1d46f8155e0f5ada315d741869262.tar.gz
[klibc] [BUILTIN] Merge SKIPFUNC/SKIPFILE and only clear SKIPFUNC when leaving dotcmd
Currently upon leaving a dotcmd the evalskip state is reset so if a continue/break statement is used within a dot script it would have no effect outside of the dot script. This is inconsistent with other shells. This patch is based on one by Jilles Tjoelker and only clears SKIPFUNC when leaving a dot script. As a result continue/break will remain in effect. It also merges SKIPFUNC/SKIPFILE as they have no practical difference. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: maximilian attems <max@stro.at>
-rw-r--r--usr/dash/eval.c2
-rw-r--r--usr/dash/eval.h1
-rw-r--r--usr/dash/main.c2
3 files changed, 2 insertions, 3 deletions
diff --git a/usr/dash/eval.c b/usr/dash/eval.c
index 8dc84ce95fd5a..ae83508ba160d 100644
--- a/usr/dash/eval.c
+++ b/usr/dash/eval.c
@@ -1043,7 +1043,7 @@ returncmd(int argc, char **argv)
* If called outside a function, do what ksh does;
* skip the rest of the file.
*/
- evalskip = funcline ? SKIPFUNC : SKIPFILE;
+ evalskip = SKIPFUNC;
return argv[1] ? number(argv[1]) : exitstatus;
}
diff --git a/usr/dash/eval.h b/usr/dash/eval.h
index ac394e8fc445d..5ccfa9f17d11f 100644
--- a/usr/dash/eval.h
+++ b/usr/dash/eval.h
@@ -57,4 +57,3 @@ extern int evalskip;
#define SKIPBREAK (1 << 0)
#define SKIPCONT (1 << 1)
#define SKIPFUNC (1 << 2)
-#define SKIPFILE (1 << 3)
diff --git a/usr/dash/main.c b/usr/dash/main.c
index b38dc2759cd32..7df3c44177b3a 100644
--- a/usr/dash/main.c
+++ b/usr/dash/main.c
@@ -242,7 +242,7 @@ cmdloop(int top)
skip = evalskip;
if (skip) {
- evalskip = 0;
+ evalskip &= ~SKIPFUNC;
break;
}
}