hush: small fix for repeated continue and fix for wrong loop depth count

after Ctrl-C; with testcase for first one
This commit is contained in:
Denis Vlasenko 2008-07-29 13:36:09 +00:00
parent 45cb9f9581
commit 4554b721ad
3 changed files with 17 additions and 1 deletions

View File

@ -2131,6 +2131,8 @@ static int run_list(struct pipe *pi)
/* ctrl-C. We just stop doing whatever we were doing */
bb_putchar('\n');
}
loop_top = NULL;
depth_of_loop = 0;
rcode = 0;
goto ret;
}
@ -2152,7 +2154,9 @@ static int run_list(struct pipe *pi)
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++;

View File

@ -0,0 +1,8 @@
A:a
A:b
A:c
OK1
A:a
A:b
A:c
OK2

View File

@ -0,0 +1,4 @@
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