From b70cef71ebf1e71d147e1dee57134b1ad1da6314 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Tue, 12 Jan 2010 13:45:45 +0100 Subject: [PATCH] hush: two NOMMU fixes for bugs 877 and 883 Signed-off-by: Denys Vlasenko --- shell/hush.c | 15 ++++++++++++--- shell/hush_test/hush-misc/nommu2.right | 5 +++++ shell/hush_test/hush-misc/nommu2.tests | 5 +++++ 3 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 shell/hush_test/hush-misc/nommu2.right create mode 100755 shell/hush_test/hush-misc/nommu2.tests diff --git a/shell/hush.c b/shell/hush.c index d02e68d49..7d851ed97 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -4406,9 +4406,15 @@ static void debug_print_tree(struct pipe *pi, int lvl) lvl*2, "", prn, command->assignment_cnt); if (command->group) { - fprintf(stderr, " group %s: (argv=%p)\n", + fprintf(stderr, " group %s: (argv=%p)%s%s\n", CMDTYPE[command->cmd_type], - argv); + argv +#if !BB_MMU + , " group_as_string:", command->group_as_string +#else + , "", "" +#endif + ); debug_print_tree(command->group, lvl+1); prn++; continue; @@ -5986,7 +5992,7 @@ static int handle_dollar(o_string *as_string, # if !BB_MMU if (as_string) { o_addstr(as_string, dest->data + pos); - o_addchr(as_string, '`'); + o_addchr(as_string, ')'); } # endif o_addchr(dest, SPECIAL_VAR_SYMBOL); @@ -6535,6 +6541,9 @@ static struct pipe *parse_stream(char **pstring, * with redirect_opt_num(), but bash doesn't do it. * "echo foo 2| cat" yields "foo 2". */ done_command(&ctx); +#if !BB_MMU + o_reset_to_empty_unquoted(&ctx.as_string); +#endif } goto new_cmd; case '(': diff --git a/shell/hush_test/hush-misc/nommu2.right b/shell/hush_test/hush-misc/nommu2.right new file mode 100644 index 000000000..fb8ba8b5c --- /dev/null +++ b/shell/hush_test/hush-misc/nommu2.right @@ -0,0 +1,5 @@ +Ok +Ok +Ok +Ok +Done diff --git a/shell/hush_test/hush-misc/nommu2.tests b/shell/hush_test/hush-misc/nommu2.tests new file mode 100755 index 000000000..61ed5ce5b --- /dev/null +++ b/shell/hush_test/hush-misc/nommu2.tests @@ -0,0 +1,5 @@ +echo Not shown | if true; then echo $(echo Ok); fi +echo Not shown | if true; then echo `echo Ok`; fi +echo Not shown | ( if true; then echo $(echo Ok); fi ) +echo Not shown | ( if true; then echo `echo Ok`; fi ) +echo Done