summaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2013-11-12 10:17:53 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2013-11-12 14:41:07 +0100
commit091ef4fcfc17f6af6a283da976d81b3b026fc6a9 (patch)
tree0e286fe00729344aa80051bb64ee1c23d98bd06f /common
parent8dabeb6a13b604cbc8e5f0321accf0fe5c5f4b63 (diff)
downloadbarebox-091ef4fcfc17f6af6a283da976d81b3b026fc6a9.tar.gz
barebox-091ef4fcfc17f6af6a283da976d81b3b026fc6a9.tar.xz
hush: fix exit on syntax error behaviour
input.__promptme is no valid indicator that run_shell should be left. It should be left on executing the 'exit' builtin which is indicated by a return code < 0 from parse_stream_outer(). Track this with an extra variable and use it as a condition to return from an interactive shell. This fixes the weird behaviour that hush exits (and the user finds itself in the menu) when a syntax error occured. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'common')
-rw-r--r--common/hush.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/common/hush.c b/common/hush.c
index bf1d9e6fd7..5969127a91 100644
--- a/common/hush.c
+++ b/common/hush.c
@@ -1853,14 +1853,17 @@ int run_shell(void)
int rcode;
struct in_str input;
struct p_context ctx;
+ int exit = 0;
do {
setup_file_in_str(&input);
rcode = parse_stream_outer(&ctx, &input, FLAG_PARSE_SEMICOLON);
- if (rcode < -1)
+ if (rcode < -1) {
+ exit = 1;
rcode = -rcode - 2;
+ }
release_context(&ctx);
- } while (!input.__promptme);
+ } while (!exit);
return rcode;
}