svn commit: trunk/busybox/shell: hush_test hush_test/hush-vars

vda at busybox.net vda at busybox.net
Fri Nov 23 21:08:39 UTC 2007


Author: vda
Date: 2007-11-23 13:08:38 -0800 (Fri, 23 Nov 2007)
New Revision: 20513

Log:
hush: fix $ expansion in redirections, add testcase for that



Added:
   trunk/busybox/shell/hush_test/hush-vars/var_expand_in_redir.right
   trunk/busybox/shell/hush_test/hush-vars/var_expand_in_redir.tests

Modified:
   trunk/busybox/shell/README
   trunk/busybox/shell/hush.c
   trunk/busybox/shell/hush_test/run-all


Changeset:
Modified: trunk/busybox/shell/README
===================================================================
--- trunk/busybox/shell/README	2007-11-23 18:05:55 UTC (rev 20512)
+++ trunk/busybox/shell/README	2007-11-23 21:08:38 UTC (rev 20513)
@@ -1,5 +1,8 @@
 Various bits of what is known about busybox shells, in no particular order.
 
+2007-11-23
+hush: fixed bogus glob handling; fixed exec <"$1"; added test and echo builtins
+
 2007-06-13
 hush: exec <"$1" doesn't do parameter subst
 

Modified: trunk/busybox/shell/hush.c
===================================================================
--- trunk/busybox/shell/hush.c	2007-11-23 18:05:55 UTC (rev 20512)
+++ trunk/busybox/shell/hush.c	2007-11-23 21:08:38 UTC (rev 20513)
@@ -1361,8 +1361,11 @@
 			continue;
 		}
 		if (redir->dup == -1) {
+			char *p;
 			mode = redir_table[redir->type].mode;
-			openfd = open_or_warn(redir->glob_word[0], mode);
+			p = expand_string_to_string(redir->glob_word[0]);
+			openfd = open_or_warn(p, mode);
+			free(p);
 			if (openfd < 0) {
 			/* this could get lost if stderr has been redirected, but
 			   bash and ash both lose it as well (though zsh doesn't!) */
@@ -2579,7 +2582,7 @@
 				}
 			} else
 			/* If or_mask is nonzero, we handle assignment 'a=....$@.....'
-			 * and in this case should theat it like '$*' */
+			 * and in this case should treat it like '$*' - see 'else...' below */
 			if (first_ch == ('@'|0x80) && !or_mask) { /* quoted $@ */
 				while (1) {
 					strcpy(pos, global_argv[i]);
@@ -2593,10 +2596,10 @@
 					list[n++] = pos;
 				}
 			} else { /* quoted $*: add as one word */
-				while (1) {
+				if (global_argv[i]) while (1) {
 					strcpy(pos, global_argv[i]);
 					pos += strlen(global_argv[i]);
-					if (++i >= global_argc)
+					if (!global_argv[++i])
 						break;
 					if (ifs[0])
 						*pos++ = ifs[0];

Added: trunk/busybox/shell/hush_test/hush-vars/var_expand_in_redir.right
===================================================================
--- trunk/busybox/shell/hush_test/hush-vars/var_expand_in_redir.right	                        (rev 0)
+++ trunk/busybox/shell/hush_test/hush-vars/var_expand_in_redir.right	2007-11-23 21:08:38 UTC (rev 20513)
@@ -0,0 +1,3 @@
+TEST1
+TEST2
+TEST3

Added: trunk/busybox/shell/hush_test/hush-vars/var_expand_in_redir.tests
===================================================================
--- trunk/busybox/shell/hush_test/hush-vars/var_expand_in_redir.tests	                        (rev 0)
+++ trunk/busybox/shell/hush_test/hush-vars/var_expand_in_redir.tests	2007-11-23 21:08:38 UTC (rev 20513)
@@ -0,0 +1,13 @@
+if test $# = 0; then
+    exec "$THIS_SH" "$0" abc "d e"
+fi
+
+echo TEST1 >"$1.out"
+echo TEST2 >"$2.out"
+# bash says: "$@.out": ambiguous redirect
+# ash handles it as if it is '$*' - we do the same
+echo TEST3 >"$@.out"
+
+cat abc.out "d e.out" "abc d e.out"
+
+rm abc.out "d e.out" "abc d e.out"


Property changes on: trunk/busybox/shell/hush_test/hush-vars/var_expand_in_redir.tests
___________________________________________________________________
Name: svn:executable
   + *

Modified: trunk/busybox/shell/hush_test/run-all
===================================================================
--- trunk/busybox/shell/hush_test/run-all	2007-11-23 18:05:55 UTC (rev 20512)
+++ trunk/busybox/shell/hush_test/run-all	2007-11-23 21:08:38 UTC (rev 20513)
@@ -11,6 +11,7 @@
 do_test()
 {
     test -d "$1" || return 0
+#   echo Running tests in directory "$1"
     (
     cd "$1" || { echo "cannot cd $1!"; exit 1; }
     for x in run-*; do




More information about the busybox-cvs mailing list