aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2008-07-29 13:36:09 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2008-07-29 13:36:09 +0000
commit4554b721ad230cdb5308b9ee61c20729c2c34ae8 (patch)
treefc7e114b9d54e4d8090f106acb31d1f7fe3f2320
parent45cb9f9581f514e1fc731d6d1146e0ee2333066a (diff)
downloadbusybox-w32-4554b721ad230cdb5308b9ee61c20729c2c34ae8.tar.gz
busybox-w32-4554b721ad230cdb5308b9ee61c20729c2c34ae8.tar.bz2
busybox-w32-4554b721ad230cdb5308b9ee61c20729c2c34ae8.zip
hush: small fix for repeated continue and fix for wrong loop depth count
after Ctrl-C; with testcase for first one
-rw-r--r--shell/hush.c6
-rw-r--r--shell/hush_test/hush-misc/continue1.right8
-rwxr-xr-xshell/hush_test/hush-misc/continue1.tests4
3 files changed, 17 insertions, 1 deletions
diff --git a/shell/hush.c b/shell/hush.c
index a2649d069..ab067dd26 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -2131,6 +2131,8 @@ static int run_list(struct pipe *pi)
2131 /* ctrl-C. We just stop doing whatever we were doing */ 2131 /* ctrl-C. We just stop doing whatever we were doing */
2132 bb_putchar('\n'); 2132 bb_putchar('\n');
2133 } 2133 }
2134 loop_top = NULL;
2135 depth_of_loop = 0;
2134 rcode = 0; 2136 rcode = 0;
2135 goto ret; 2137 goto ret;
2136 } 2138 }
@@ -2152,7 +2154,9 @@ static int run_list(struct pipe *pi)
2152 debug_printf_exec(": rword=%d cond_code=%d skip_more=%d\n", 2154 debug_printf_exec(": rword=%d cond_code=%d skip_more=%d\n",
2153 rword, cond_code, skip_more_for_this_rword); 2155 rword, cond_code, skip_more_for_this_rword);
2154#if ENABLE_HUSH_LOOPS 2156#if ENABLE_HUSH_LOOPS
2155 if (rword == RES_WHILE || rword == RES_UNTIL || rword == RES_FOR) { 2157 if ((rword == RES_WHILE || rword == RES_UNTIL || rword == RES_FOR)
2158 && loop_top == NULL /* avoid bumping depth_of_loop twice */
2159 ) {
2156 /* start of a loop: remember where loop starts */ 2160 /* start of a loop: remember where loop starts */
2157 loop_top = pi; 2161 loop_top = pi;
2158 depth_of_loop++; 2162 depth_of_loop++;
diff --git a/shell/hush_test/hush-misc/continue1.right b/shell/hush_test/hush-misc/continue1.right
new file mode 100644
index 000000000..c4a5565bc
--- /dev/null
+++ b/shell/hush_test/hush-misc/continue1.right
@@ -0,0 +1,8 @@
1A:a
2A:b
3A:c
4OK1
5A:a
6A:b
7A:c
8OK2
diff --git a/shell/hush_test/hush-misc/continue1.tests b/shell/hush_test/hush-misc/continue1.tests
new file mode 100755
index 000000000..72d356660
--- /dev/null
+++ b/shell/hush_test/hush-misc/continue1.tests
@@ -0,0 +1,4 @@
1for v in a b c; do echo A:$v; continue 666; done
2echo OK1
3for v in a b c; do echo A:$v; continue 666; done
4echo OK2