diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2013-11-12 10:17:53 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2013-11-12 14:41:07 +0100 |
commit | 091ef4fcfc17f6af6a283da976d81b3b026fc6a9 (patch) | |
tree | 0e286fe00729344aa80051bb64ee1c23d98bd06f | |
parent | 8dabeb6a13b604cbc8e5f0321accf0fe5c5f4b63 (diff) | |
download | barebox-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>
-rw-r--r-- | common/hush.c | 7 |
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; } |