hush: fix "case ... in <newline> word)..."
This commit is contained in:
parent
fbeeb328b8
commit
f173607520
12
shell/hush.c
12
shell/hush.c
@ -3659,6 +3659,15 @@ static int parse_stream(o_string *dest, struct p_context *ctx,
|
|||||||
* a newline as a command separator.
|
* a newline as a command separator.
|
||||||
* [why we don't handle it exactly like ';'? --vda] */
|
* [why we don't handle it exactly like ';'? --vda] */
|
||||||
if (end_trigger && ch == '\n') {
|
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);
|
done_pipe(ctx, PIPE_SEQ);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3839,7 +3848,7 @@ static int parse_stream(o_string *dest, struct p_context *ctx,
|
|||||||
done_word(dest, ctx);
|
done_word(dest, ctx);
|
||||||
#if ENABLE_HUSH_CASE
|
#if ENABLE_HUSH_CASE
|
||||||
if (ctx->ctx_res_w == RES_MATCH)
|
if (ctx->ctx_res_w == RES_MATCH)
|
||||||
break;
|
break; /* we are in case's "word | word)" */
|
||||||
#endif
|
#endif
|
||||||
if (next == '|') {
|
if (next == '|') {
|
||||||
i_getch(input);
|
i_getch(input);
|
||||||
@ -3853,6 +3862,7 @@ static int parse_stream(o_string *dest, struct p_context *ctx,
|
|||||||
break;
|
break;
|
||||||
case '(':
|
case '(':
|
||||||
#if ENABLE_HUSH_CASE
|
#if ENABLE_HUSH_CASE
|
||||||
|
/* "case... in [(]word)..." - skip '(' */
|
||||||
if (dest->length == 0 // && argv[0] == NULL
|
if (dest->length == 0 // && argv[0] == NULL
|
||||||
&& ctx->ctx_res_w == RES_MATCH
|
&& ctx->ctx_res_w == RES_MATCH
|
||||||
) {
|
) {
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
OK_1
|
OK_1
|
||||||
|
OK_1
|
||||||
OK_21
|
OK_21
|
||||||
OK_22
|
OK_22
|
||||||
OK_23
|
OK_23
|
||||||
|
@ -1,5 +1,13 @@
|
|||||||
case w in a) echo SKIP;; w) echo OK_1;; w) echo WRONG;; esac
|
case w in a) echo SKIP;; w) echo OK_1;; w) echo WRONG;; esac
|
||||||
|
|
||||||
|
case w in
|
||||||
|
a) echo SKIP;;
|
||||||
|
w)echo OK_1 ;;
|
||||||
|
w)
|
||||||
|
echo WRONG
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
t=w
|
t=w
|
||||||
case $t in a) echo SKIP;; w) echo OK_21;; w) echo WRONG;; esac;
|
case $t in a) echo SKIP;; w) echo OK_21;; w) echo WRONG;; esac;
|
||||||
case "$t" in a) echo SKIP;; w) echo OK_22;; w) echo WRONG;; esac;
|
case "$t" in a) echo SKIP;; w) echo OK_22;; w) echo WRONG;; esac;
|
||||||
|
Loading…
Reference in New Issue
Block a user