aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2009-04-05 02:10:39 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2009-04-05 02:10:39 +0000
commit30db43b5c566b498f39dfc63767277a0e8f347d2 (patch)
treecfda2d561906405f16843fb181961ee353cb1b03
parent16a0c74f638d2d730525856d391078f2ea662aeb (diff)
downloadbusybox-w32-30db43b5c566b498f39dfc63767277a0e8f347d2.tar.gz
busybox-w32-30db43b5c566b498f39dfc63767277a0e8f347d2.tar.bz2
busybox-w32-30db43b5c566b498f39dfc63767277a0e8f347d2.zip
hush: fix passing of $n on NOMMU
-rw-r--r--shell/hush.c12
-rw-r--r--shell/hush_test/hush-vars/param_subshell.right7
-rwxr-xr-xshell/hush_test/hush-vars/param_subshell.tests13
3 files changed, 28 insertions, 4 deletions
diff --git a/shell/hush.c b/shell/hush.c
index 3388ad7f9..8ffdfb1a8 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -2342,11 +2342,13 @@ static void re_execute_shell(const char *s) NORETURN;
2342static void re_execute_shell(const char *s) 2342static void re_execute_shell(const char *s)
2343{ 2343{
2344 struct variable *cur; 2344 struct variable *cur;
2345 char **argv, **pp; 2345 char **argv, **pp, **pp2;
2346 unsigned cnt; 2346 unsigned cnt;
2347 2347
2348 /* hush -$<pid> -?<exitcode> -D<depth> ... -c <cmd> NULL */ 2348 /* 1:hush 2:-$<pid> 3:-?<exitcode> 4:-D<depth> <vars...>
2349 cnt = 7; 2349 * 5:-c 6:<cmd> <argN...> 7:NULL
2350 */
2351 cnt = 7 + G.global_argc;
2350 for (cur = G.top_var; cur; cur = cur->next) { 2352 for (cur = G.top_var; cur; cur = cur->next) {
2351 if (!cur->flg_export || cur->flg_read_only) 2353 if (!cur->flg_export || cur->flg_read_only)
2352 cnt += 2; 2354 cnt += 2;
@@ -2370,7 +2372,9 @@ static void re_execute_shell(const char *s)
2370 } 2372 }
2371 *pp++ = (char *) "-c"; 2373 *pp++ = (char *) "-c";
2372 *pp++ = (char *) s; 2374 *pp++ = (char *) s;
2373//TODO: pass $N 2375 pp2 = G.global_argv;
2376 while (*pp2)
2377 *pp++ = *pp2++;
2374 *pp = NULL; 2378 *pp = NULL;
2375//TODO: pass traps and functions 2379//TODO: pass traps and functions
2376 2380
diff --git a/shell/hush_test/hush-vars/param_subshell.right b/shell/hush_test/hush-vars/param_subshell.right
new file mode 100644
index 000000000..f3c3767de
--- /dev/null
+++ b/shell/hush_test/hush-vars/param_subshell.right
@@ -0,0 +1,7 @@
11=1
22=2
33=3
44=4
55=5
66=6
77=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
index 000000000..6beaeae66
--- /dev/null
+++ b/shell/hush_test/hush-vars/param_subshell.tests
@@ -0,0 +1,13 @@
1if test $# = 0; then
2 "$THIS_SH" "$0" 1 2 3 4 5 6 7 8 9
3 exit
4fi
5echo 1=$1
6{ echo 2=$2; }
7{ echo 3=$3; } &
8usleep 100000
9( echo 4=$4 )
10( echo 5=$5 ) &
11usleep 100000
12true | echo 6=$6 | cat
13true | { echo 7=$7; } | cat