hush: two NOMMU fixes for bugs 877 and 883
authorDenys Vlasenko <vda.linux@googlemail.com>
Tue, 12 Jan 2010 12:45:45 +0000 (13:45 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Tue, 12 Jan 2010 12:45:45 +0000 (13:45 +0100)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
shell/hush.c
shell/hush_test/hush-misc/nommu2.right [new file with mode: 0644]
shell/hush_test/hush-misc/nommu2.tests [new file with mode: 0755]

index d02e68d496a5ef08b64d215b10feaea3b8703335..7d851ed97d84f969ee6ec184657ebd1d4ec3f710 100644 (file)
@@ -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 (file)
index 0000000..fb8ba8b
--- /dev/null
@@ -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 (executable)
index 0000000..61ed5ce
--- /dev/null
@@ -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