hush: fix passing of $n on NOMMU
authorDenis Vlasenko <vda.linux@googlemail.com>
Sun, 5 Apr 2009 02:10:39 +0000 (02:10 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Sun, 5 Apr 2009 02:10:39 +0000 (02:10 -0000)
shell/hush.c
shell/hush_test/hush-vars/param_subshell.right [new file with mode: 0644]
shell/hush_test/hush-vars/param_subshell.tests [new file with mode: 0755]

index 3388ad7f9cfc43c5228fe1c94c5eeffad1a06abf..8ffdfb1a8247bfd45d169c2ea899984bda625e37 100644 (file)
@@ -2342,11 +2342,13 @@ static void re_execute_shell(const char *s) NORETURN;
 static void re_execute_shell(const char *s)
 {
        struct variable *cur;
-       char **argv, **pp;
+       char **argv, **pp, **pp2;
        unsigned cnt;
 
-       /* hush -$<pid> -?<exitcode> -D<depth> ... -c <cmd> NULL */
-       cnt = 7;
+       /* 1:hush 2:-$<pid> 3:-?<exitcode> 4:-D<depth> <vars...>
+        * 5:-c 6:<cmd> <argN...> 7:NULL
+        */
+       cnt = 7 + G.global_argc;
        for (cur = G.top_var; cur; cur = cur->next) {
                if (!cur->flg_export || cur->flg_read_only)
                        cnt += 2;
@@ -2370,7 +2372,9 @@ static void re_execute_shell(const char *s)
        }
        *pp++ = (char *) "-c";
        *pp++ = (char *) s;
-//TODO: pass $N
+       pp2 = G.global_argv;
+       while (*pp2)
+               *pp++ = *pp2++;
        *pp = NULL;
 //TODO: pass traps and functions
 
diff --git a/shell/hush_test/hush-vars/param_subshell.right b/shell/hush_test/hush-vars/param_subshell.right
new file mode 100644 (file)
index 0000000..f3c3767
--- /dev/null
@@ -0,0 +1,7 @@
+1=1
+2=2
+3=3
+4=4
+5=5
+6=6
+7=7
diff --git a/shell/hush_test/hush-vars/param_subshell.tests b/shell/hush_test/hush-vars/param_subshell.tests
new file mode 100755 (executable)
index 0000000..6beaeae
--- /dev/null
@@ -0,0 +1,13 @@
+if test $# = 0; then
+    "$THIS_SH" "$0" 1 2 3 4 5 6 7 8 9
+    exit
+fi
+echo 1=$1
+{ echo 2=$2; }
+{ echo 3=$3; } &
+usleep 100000
+( echo 4=$4 )
+( echo 5=$5 ) &
+usleep 100000
+true | echo 6=$6 | cat
+true | { echo 7=$7; } | cat