after Ctrl-C; with testcase for first one
/* ctrl-C. We just stop doing whatever we were doing */
bb_putchar('\n');
}
+ loop_top = NULL;
+ depth_of_loop = 0;
rcode = 0;
goto ret;
}
debug_printf_exec(": rword=%d cond_code=%d skip_more=%d\n",
rword, cond_code, skip_more_for_this_rword);
#if ENABLE_HUSH_LOOPS
- if (rword == RES_WHILE || rword == RES_UNTIL || rword == RES_FOR) {
+ if ((rword == RES_WHILE || rword == RES_UNTIL || rword == RES_FOR)
+ && loop_top == NULL /* avoid bumping depth_of_loop twice */
+ ) {
/* start of a loop: remember where loop starts */
loop_top = pi;
depth_of_loop++;
--- /dev/null
+A:a
+A:b
+A:c
+OK1
+A:a
+A:b
+A:c
+OK2
--- /dev/null
+for v in a b c; do echo A:$v; continue 666; done
+echo OK1
+for v in a b c; do echo A:$v; continue 666; done
+echo OK2