diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2011-03-24 02:50:03 +0100 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2011-03-24 02:50:03 +0100 |
commit | 68d5cb5dacbc80347119ac9cff365e5f04105ef1 (patch) | |
tree | 0131cb18f76a4e366a17de7c34882f07c5550557 /shell | |
parent | 20704f066250744c0c2b84920c27d0fd0aa9e935 (diff) | |
download | busybox-68d5cb5dacbc80347119ac9cff365e5f04105ef1.tar.gz |
hush: fix a case where return in sourced file has no effect
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'shell')
-rw-r--r-- | shell/hush.c | 4 | ||||
-rw-r--r-- | shell/hush_test/hush-misc/return1.right | 1 | ||||
-rwxr-xr-x | shell/hush_test/hush-misc/return1.tests | 4 |
3 files changed, 9 insertions, 0 deletions
diff --git a/shell/hush.c b/shell/hush.c index 339f3349a..8154ac47b 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -5554,6 +5554,10 @@ static void parse_and_run_stream(struct in_str *inp, int end_trigger) debug_printf_exec("parse_and_run_stream: run_and_free_list\n"); run_and_free_list(pipe_list); empty = 0; +#if ENABLE_HUSH_FUNCTIONS + if (G.flag_return_in_progress == 1) + break; +#endif } } diff --git a/shell/hush_test/hush-misc/return1.right b/shell/hush_test/hush-misc/return1.right new file mode 100644 index 000000000..7b24a35ff --- /dev/null +++ b/shell/hush_test/hush-misc/return1.right @@ -0,0 +1 @@ +Ok:0 diff --git a/shell/hush_test/hush-misc/return1.tests b/shell/hush_test/hush-misc/return1.tests new file mode 100755 index 000000000..eeb92ef3f --- /dev/null +++ b/shell/hush_test/hush-misc/return1.tests @@ -0,0 +1,4 @@ +echo "true && return; echo Should not be printed" >return_sourced +. ./return_sourced +rm return_sourced +echo Ok:$? |