[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>
diff --git a/usr/dash/eval.c b/usr/dash/eval.c
index 8dc84ce..ae83508 100644
--- a/usr/dash/eval.c
+++ b/usr/dash/eval.c
@@ -1043,7 +1043,7 @@
 	 * 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 ac394e8..5ccfa9f 100644
--- a/usr/dash/eval.h
+++ b/usr/dash/eval.h
@@ -57,4 +57,3 @@
 #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 b38dc27..7df3c44 100644
--- a/usr/dash/main.c
+++ b/usr/dash/main.c
@@ -242,7 +242,7 @@
 
 		skip = evalskip;
 		if (skip) {
-			evalskip = 0;
+			evalskip &= ~SKIPFUNC;
 			break;
 		}
 	}