diff options
author | Denis Vlasenko | 2008-07-31 10:09:26 +0000 |
---|---|---|
committer | Denis Vlasenko | 2008-07-31 10:09:26 +0000 |
commit | f173607520e0455d267a7a4100e5018f30000c56 (patch) | |
tree | 6699a09a57e45890ac07eb4ec2964f9ed7486230 /shell/hush.c | |
parent | fbeeb328b8a2e0006f9a53ddea6892f9c1a03132 (diff) | |
download | busybox-f173607520e0455d267a7a4100e5018f30000c56.zip busybox-f173607520e0455d267a7a4100e5018f30000c56.tar.gz |
hush: fix "case ... in <newline> word)..."
Diffstat (limited to 'shell/hush.c')
-rw-r--r-- | shell/hush.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/shell/hush.c b/shell/hush.c index 564b62c..8be0ecf 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -3659,6 +3659,15 @@ static int parse_stream(o_string *dest, struct p_context *ctx, * a newline as a command separator. * [why we don't handle it exactly like ';'? --vda] */ if (end_trigger && ch == '\n') { +#if ENABLE_HUSH_CASE + /* "case ... in <newline> word) ..." - + * newlines are ignored (but ';' wouldn't be) */ + if (dest->length == 0 // && argv[0] == NULL + && ctx->ctx_res_w == RES_MATCH + ) { + continue; + } +#endif done_pipe(ctx, PIPE_SEQ); } } @@ -3839,7 +3848,7 @@ static int parse_stream(o_string *dest, struct p_context *ctx, done_word(dest, ctx); #if ENABLE_HUSH_CASE if (ctx->ctx_res_w == RES_MATCH) - break; + break; /* we are in case's "word | word)" */ #endif if (next == '|') { i_getch(input); @@ -3853,6 +3862,7 @@ static int parse_stream(o_string *dest, struct p_context *ctx, break; case '(': #if ENABLE_HUSH_CASE + /* "case... in [(]word)..." - skip '(' */ if (dest->length == 0 // && argv[0] == NULL && ctx->ctx_res_w == RES_MATCH ) { |