svn commit: trunk/busybox/shell: ash_test/ash-arith ash_test/ash-vars

vda at busybox.net vda at busybox.net
Tue Mar 25 07:49:43 UTC 2008


Author: vda
Date: 2008-03-25 00:49:43 -0700 (Tue, 25 Mar 2008)
New Revision: 21489

Log:
ash: support for && and || in [[ expr ]]; add testsuite checks



Added:
   trunk/busybox/shell/ash_test/ash-arith/arith-bash1.right
   trunk/busybox/shell/ash_test/ash-arith/arith-bash1.tests
   trunk/busybox/shell/ash_test/ash-vars/var_bash1.right
   trunk/busybox/shell/ash_test/ash-vars/var_bash1.tests
   trunk/busybox/shell/ash_test/ash-vars/var_bash2.right
   trunk/busybox/shell/ash_test/ash-vars/var_bash2.tests

Modified:
   trunk/busybox/shell/ash.c


Changeset:
Modified: trunk/busybox/shell/ash.c
===================================================================
--- trunk/busybox/shell/ash.c	2008-03-25 06:10:14 UTC (rev 21488)
+++ trunk/busybox/shell/ash.c	2008-03-25 07:49:43 UTC (rev 21489)
@@ -8470,8 +8470,10 @@
 	{ BUILTIN_SPEC_REG      ":", truecmd },
 #if ENABLE_ASH_BUILTIN_TEST
 	{ BUILTIN_REGULAR	"[", testcmd },
+#if ENABLE_ASH_BASH_COMPAT
 	{ BUILTIN_REGULAR	"[[", testcmd },
 #endif
+#endif
 #if ENABLE_ASH_ALIAS
 	{ BUILTIN_REG_ASSG      "alias", aliascmd },
 #endif
@@ -8534,18 +8536,26 @@
 	{ BUILTIN_REGULAR       "wait", waitcmd },
 };
 
+/* Should match the above table! */
+#define COMMANDCMD (builtintab + \
+	2 + \
+	1 * ENABLE_ASH_BUILTIN_TEST + \
+	1 * ENABLE_ASH_BUILTIN_TEST * ENABLE_ASH_BASH_COMPAT + \
+	1 * ENABLE_ASH_ALIAS + \
+	1 * ENABLE_ASH_JOB_CONTROL + \
+	3)
+#define EXECCMD (builtintab + \
+	2 + \
+	1 * ENABLE_ASH_BUILTIN_TEST + \
+	1 * ENABLE_ASH_BUILTIN_TEST * ENABLE_ASH_BASH_COMPAT + \
+	1 * ENABLE_ASH_ALIAS + \
+	1 * ENABLE_ASH_JOB_CONTROL + \
+	3 + \
+	1 * ENABLE_ASH_CMDCMD + \
+	1 + \
+	ENABLE_ASH_BUILTIN_ECHO + \
+	1)
 
-#define COMMANDCMD (builtintab + 5 + \
-	2 * ENABLE_ASH_BUILTIN_TEST + \
-	ENABLE_ASH_ALIAS + \
-	ENABLE_ASH_JOB_CONTROL)
-#define EXECCMD (builtintab + 7 + \
-	2 * ENABLE_ASH_BUILTIN_TEST + \
-	ENABLE_ASH_ALIAS + \
-	ENABLE_ASH_JOB_CONTROL + \
-	ENABLE_ASH_CMDCMD + \
-	ENABLE_ASH_BUILTIN_ECHO)
-
 /*
  * Search the table of builtin commands.
  */
@@ -10048,6 +10058,9 @@
 	union node *vars, **vpp;
 	union node **rpp, *redir;
 	int savecheckkwd;
+#if ENABLE_ASH_BASH_COMPAT
+	smallint double_brackets_flag = 0;
+#endif
 
 	args = NULL;
 	app = &args;
@@ -10058,13 +10071,30 @@
 
 	savecheckkwd = CHKALIAS;
 	for (;;) {
+		int t;
 		checkkwd = savecheckkwd;
-		switch (readtoken()) {
+		t = readtoken();
+		switch (t) {
+#if ENABLE_ASH_BASH_COMPAT
+		case TAND: /* "&&" */
+		case TOR: /* "||" */
+			if (!double_brackets_flag) {
+				tokpushback = 1;
+				goto out;
+			}
+			wordtext = (char *) (t == TAND ? "-a" : "-o");
+#endif
 		case TWORD:
 			n = stzalloc(sizeof(struct narg));
 			n->type = NARG;
 			/*n->narg.next = NULL; - stzalloc did it */
 			n->narg.text = wordtext;
+#if ENABLE_ASH_BASH_COMPAT
+			if (strcmp("[[", wordtext) == 0)
+				double_brackets_flag = 1;
+			else if (strcmp("]]", wordtext) == 0)
+				double_brackets_flag = 0;
+#endif
 			n->narg.backquote = backquotelist;
 			if (savecheckkwd && isassignment(wordtext)) {
 				*vpp = n;

Added: trunk/busybox/shell/ash_test/ash-arith/arith-bash1.right
===================================================================
--- trunk/busybox/shell/ash_test/ash-arith/arith-bash1.right	                        (rev 0)
+++ trunk/busybox/shell/ash_test/ash-arith/arith-bash1.right	2008-03-25 07:49:43 UTC (rev 21489)
@@ -0,0 +1,2 @@
+1
+0

Added: trunk/busybox/shell/ash_test/ash-arith/arith-bash1.tests
===================================================================
--- trunk/busybox/shell/ash_test/ash-arith/arith-bash1.tests	                        (rev 0)
+++ trunk/busybox/shell/ash_test/ash-arith/arith-bash1.tests	2008-03-25 07:49:43 UTC (rev 21489)
@@ -0,0 +1,5 @@
+# checks for [[ ]]
+
+# && and ||
+[[ a && "" ]]; echo $?
+[[ a || "" ]]; echo $?


Property changes on: trunk/busybox/shell/ash_test/ash-arith/arith-bash1.tests
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/busybox/shell/ash_test/ash-vars/var_bash1.right
===================================================================
--- trunk/busybox/shell/ash_test/ash-vars/var_bash1.right	                        (rev 0)
+++ trunk/busybox/shell/ash_test/ash-vars/var_bash1.right	2008-03-25 07:49:43 UTC (rev 21489)
@@ -0,0 +1,14 @@
+
+
+f
+bcdef
+abcdef
+abcdef
+bcde
+abcd
+abcd
+abcdef
+bcdef
+abcdef
+abcdef
+abcdef

Added: trunk/busybox/shell/ash_test/ash-vars/var_bash1.tests
===================================================================
--- trunk/busybox/shell/ash_test/ash-vars/var_bash1.tests	                        (rev 0)
+++ trunk/busybox/shell/ash_test/ash-vars/var_bash1.tests	2008-03-25 07:49:43 UTC (rev 21489)
@@ -0,0 +1,18 @@
+var=abcdef
+
+echo ${var:7}
+echo ${var:6}
+echo ${var:5}
+echo ${var:1}
+echo ${var:0}
+echo ${var:-1}
+
+echo ${var:1:4}
+echo ${var:0:4}
+echo ${var::4}
+echo ${var:-1:4}
+
+echo ${var:1:7}
+echo ${var:0:7}
+echo ${var::7}
+echo ${var:-1:7}


Property changes on: trunk/busybox/shell/ash_test/ash-vars/var_bash1.tests
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/busybox/shell/ash_test/ash-vars/var_bash2.right
===================================================================
--- trunk/busybox/shell/ash_test/ash-vars/var_bash2.right	                        (rev 0)
+++ trunk/busybox/shell/ash_test/ash-vars/var_bash2.right	2008-03-25 07:49:43 UTC (rev 21489)
@@ -0,0 +1,10 @@
+abc123xcba123
+abx123dcba123
+abx123dxba123
+abcx23dcba123
+abcxxxdcbaxxx
+abx
+xba123
+abx23
+abc23dcba123
+abcdcba

Added: trunk/busybox/shell/ash_test/ash-vars/var_bash2.tests
===================================================================
--- trunk/busybox/shell/ash_test/ash-vars/var_bash2.tests	                        (rev 0)
+++ trunk/busybox/shell/ash_test/ash-vars/var_bash2.tests	2008-03-25 07:49:43 UTC (rev 21489)
@@ -0,0 +1,24 @@
+var=abc123dcba123
+
+echo ${var/d/x}
+echo ${var/c/x}
+echo ${var//c/x}
+echo ${var/[123]/x}
+echo ${var//[123]/x}
+echo ${var/c*/x}
+echo ${var/*c/x}
+
+# must match longest match: result is "abx23"
+echo ${var/c*1/x}
+
+# empty replacement - 2nd slash can be omitted
+echo ${var/[123]}
+echo ${var//[123]}
+
+### ash doesn't support
+### # match only at the beginning:
+### echo ${var/#a/x}
+### echo ${var/#b/x} # should not match
+### echo ${var//#b/x} # should not match
+### # match only at the end:
+### echo ${var/%3/x}


Property changes on: trunk/busybox/shell/ash_test/ash-vars/var_bash2.tests
___________________________________________________________________
Name: svn:executable
   + *




More information about the busybox-cvs mailing list