hush: simplify \<newline> code, part 2
function old new delta parse_stream 2787 2780 -7 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
1c57269b5d
commit
e8b1bc0481
60
shell/hush.c
60
shell/hush.c
@ -5364,7 +5364,7 @@ static struct pipe *parse_stream(char **pstring,
|
||||
case '#':
|
||||
/* non-comment #: "echo a#b" etc */
|
||||
o_addchr(&ctx.word, ch);
|
||||
break;
|
||||
continue; /* get next char */
|
||||
case '\\':
|
||||
if (next == EOF) {
|
||||
//TODO: in ". FILE" containing "cmd\" (no newline) bash ignores last "\"
|
||||
@ -5380,51 +5380,51 @@ static struct pipe *parse_stream(char **pstring,
|
||||
/* Example: echo Hello \2>file
|
||||
* we need to know that word 2 is quoted */
|
||||
ctx.word.has_quoted_part = 1;
|
||||
break;
|
||||
continue; /* get next char */
|
||||
case '$':
|
||||
if (!parse_dollar(&ctx.as_string, &ctx.word, input, /*quote_mask:*/ 0)) {
|
||||
debug_printf_parse("parse_stream parse error: "
|
||||
"parse_dollar returned 0 (error)\n");
|
||||
goto parse_error;
|
||||
}
|
||||
break;
|
||||
continue; /* get next char */
|
||||
case '\'':
|
||||
ctx.word.has_quoted_part = 1;
|
||||
if (next == '\'' && !ctx.pending_redirect) {
|
||||
if (next == '\'' && !ctx.pending_redirect)
|
||||
goto insert_empty_quoted_str_marker;
|
||||
while (1) {
|
||||
ch = i_getch(input);
|
||||
if (ch == EOF) {
|
||||
syntax_error_unterm_ch('\'');
|
||||
goto parse_error;
|
||||
}
|
||||
nommu_addchr(&ctx.as_string, ch);
|
||||
if (ch == '\'')
|
||||
break;
|
||||
if (ch == SPECIAL_VAR_SYMBOL) {
|
||||
/* Convert raw ^C to corresponding special variable reference */
|
||||
o_addchr(&ctx.word, SPECIAL_VAR_SYMBOL);
|
||||
o_addchr(&ctx.word, SPECIAL_VAR_QUOTED_SVS);
|
||||
}
|
||||
o_addqchr(&ctx.word, ch);
|
||||
}
|
||||
continue; /* get next char */
|
||||
case '"':
|
||||
ctx.word.has_quoted_part = 1;
|
||||
if (next == '"' && !ctx.pending_redirect) {
|
||||
insert_empty_quoted_str_marker:
|
||||
nommu_addchr(&ctx.as_string, next);
|
||||
i_getch(input); /* eat second ' */
|
||||
o_addchr(&ctx.word, SPECIAL_VAR_SYMBOL);
|
||||
o_addchr(&ctx.word, SPECIAL_VAR_SYMBOL);
|
||||
} else {
|
||||
while (1) {
|
||||
ch = i_getch(input);
|
||||
if (ch == EOF) {
|
||||
syntax_error_unterm_ch('\'');
|
||||
goto parse_error;
|
||||
}
|
||||
nommu_addchr(&ctx.as_string, ch);
|
||||
if (ch == '\'')
|
||||
break;
|
||||
if (ch == SPECIAL_VAR_SYMBOL) {
|
||||
/* Convert raw ^C to corresponding special variable reference */
|
||||
o_addchr(&ctx.word, SPECIAL_VAR_SYMBOL);
|
||||
o_addchr(&ctx.word, SPECIAL_VAR_QUOTED_SVS);
|
||||
}
|
||||
o_addqchr(&ctx.word, ch);
|
||||
}
|
||||
continue; /* get next char */
|
||||
}
|
||||
break;
|
||||
case '"':
|
||||
ctx.word.has_quoted_part = 1;
|
||||
if (next == '"' && !ctx.pending_redirect)
|
||||
goto insert_empty_quoted_str_marker;
|
||||
if (ctx.is_assignment == NOT_ASSIGNMENT)
|
||||
ctx.word.o_expflags |= EXP_FLAG_ESC_GLOB_CHARS;
|
||||
if (!encode_string(&ctx.as_string, &ctx.word, input, '"', /*process_bkslash:*/ 1))
|
||||
goto parse_error;
|
||||
ctx.word.o_expflags &= ~EXP_FLAG_ESC_GLOB_CHARS;
|
||||
break;
|
||||
continue; /* get next char */
|
||||
#if ENABLE_HUSH_TICK
|
||||
case '`': {
|
||||
USE_FOR_NOMMU(unsigned pos;)
|
||||
@ -5440,7 +5440,7 @@ static struct pipe *parse_stream(char **pstring,
|
||||
# endif
|
||||
o_addchr(&ctx.word, SPECIAL_VAR_SYMBOL);
|
||||
//debug_printf_subst("SUBST RES3 '%s'\n", ctx.word.data + pos);
|
||||
break;
|
||||
continue; /* get next char */
|
||||
}
|
||||
#endif
|
||||
case ';':
|
||||
@ -5472,7 +5472,7 @@ static struct pipe *parse_stream(char **pstring,
|
||||
* with an assignment */
|
||||
ctx.is_assignment = MAYBE_ASSIGNMENT;
|
||||
debug_printf_parse("ctx.is_assignment='%s'\n", assignment_flag[ctx.is_assignment]);
|
||||
break;
|
||||
continue; /* get next char */
|
||||
case '&':
|
||||
if (done_word(&ctx)) {
|
||||
goto parse_error;
|
||||
@ -5512,7 +5512,7 @@ static struct pipe *parse_stream(char **pstring,
|
||||
&& ctx.word.length == 0 /* not word(... */
|
||||
&& ctx.word.has_quoted_part == 0 /* not ""(... */
|
||||
) {
|
||||
continue;
|
||||
continue; /* get next char */
|
||||
}
|
||||
#endif
|
||||
case '{':
|
||||
|
Loading…
Reference in New Issue
Block a user