diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2010-05-17 09:49:47 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2010-05-17 09:49:47 +0200 |
commit | 3227d3f982e809fd02b37d6274f1c7da0a307cea (patch) | |
tree | 91a012dc7a9fdf3016f2258e05d4588e2cb89bf1 /shell/hush.c | |
parent | 0f01b00d742f92061cbbd9e95d1cd0368c4d2a4c (diff) |
hush: fix hush-bugs/parse_err.tests
function old new delta
parse_stream 2325 2339 +14
builtin_umask 121 123 +2
builtin_type 116 114 -2
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'shell/hush.c')
-rw-r--r-- | shell/hush.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/shell/hush.c b/shell/hush.c index 07cacbfc9..1bc0c611d 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -6232,10 +6232,15 @@ static struct pipe *parse_stream(char **pstring, is_special = "{}<>;&|()#'" /* special outside of "str" */ "\\$\"" IF_HUSH_TICK("`"); /* always special */ /* Are { and } special here? */ - if (ctx.command->argv /* word [word]{... */ - || dest.length /* word{... */ - || dest.o_quoted /* ""{... */ - || (next != ';' && next != ')' && !strchr(G.ifs, next)) /* {word */ + if (ctx.command->argv /* word [word]{... - non-special */ + || dest.length /* word{... - non-special */ + || dest.o_quoted /* ""{... - non-special */ + || (next != ';' /* }; - special */ + && next != ')' /* }) - special */ + && next != '&' /* }& and }&& ... - special */ + && next != '|' /* }|| ... - special */ + && !strchr(G.ifs, next) /* {word - non-special */ + ) ) { /* They are not special, skip "{}" */ is_special += 2; |