diff options
author | Eric Andersen | 2004-04-12 21:41:29 +0000 |
---|---|---|
committer | Eric Andersen | 2004-04-12 21:41:29 +0000 |
commit | 99fcd168cc7d36e054bb29628b5eb023fc9f51b4 (patch) | |
tree | 0cb5961606795454bcd2aed65977d43d28ad5d77 /shell | |
parent | 238e354b586ca3f7b68e8baeab7444e523493a12 (diff) | |
download | busybox-99fcd168cc7d36e054bb29628b5eb023fc9f51b4.zip busybox-99fcd168cc7d36e054bb29628b5eb023fc9f51b4.tar.gz |
Wolfgang Denk writes:
He,
there is a bug in HUSH's handling of "if" / "elif" commands:
$ if true
> then
> echo 1
> elif
> true
> then
> echo 2
> elif
> true
> then
> echo 3
> else
> echo 4
> fi
1
2
3
$
The same bug exists in all versions of HUSH from BB v0.60.x up to and
including v1.00-pre9. The attached patch fixes this:
$ if true
> then
> echo 1
> elif
> true
> then
> echo 2
> elif
> true
> then
> echo 3
> else
> echo 4
> fi
1
$
Best regards,
Wolfgang Denk
Diffstat (limited to 'shell')
-rw-r--r-- | shell/hush.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/shell/hush.c b/shell/hush.c index 8f4cc97..6d31cdc 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -1557,7 +1557,7 @@ static int run_list_real(struct pipe *pi) if (rmode == RES_THEN || rmode == RES_ELSE) if_code = next_if_code; if (rmode == RES_THEN && if_code) continue; if (rmode == RES_ELSE && !if_code) continue; - if (rmode == RES_ELIF && !if_code) continue; + if (rmode == RES_ELIF && !if_code) break; if (rmode == RES_FOR && pi->num_progs) { if (!list) { /* if no variable values after "in" we skip "for" */ |