[PATCH] support compound condition testing for ash

James Simmons jsimmons at infradead.org
Mon Mar 24 09:45:25 PDT 2008


This patch allows for doing [[ condition1 -a condition2 ]] 

diff -urwN busybox-1.10.0.orig/shell/ash.c busybox-1.10.0/shell/ash.c
--- busybox-1.10.0.orig/shell/ash.c	2008-03-24 12:40:29.000000000 -0400
+++ busybox-1.10.0/shell/ash.c	2008-03-24 12:57:45.000000000 -0400
@@ -10008,7 +10008,7 @@
 	union node *n = NULL;
 	union node *vars, **vpp;
 	union node **rpp, *redir;
-	int savecheckkwd;
+	int savecheckkwd, flag = 0;
 
 	args = NULL;
 	app = &args;
@@ -10021,11 +10021,24 @@
 	for (;;) {
 		checkkwd = savecheckkwd;
 		switch (readtoken()) {
+		case TAND:
+			wordtext = (char *) "-a";
+		case TOR:
+			if (strcmp(wordtext, "&&"))
+				wordtext = (char *) "-o";
+			if (!flag) {
+				tokpushback++;
+				goto out;
+			}
 		case TWORD:
 			n = stzalloc(sizeof(struct narg));
 			n->type = NARG;
 			/*n->narg.next = NULL; - stzalloc did it */
 			n->narg.text = wordtext;
+			if (!strcmp("[[", wordtext))
+				flag = 1;
+			else if (!strcmp("]]", wordtext))
+				flag = 0;
 			n->narg.backquote = backquotelist;
 			if (savecheckkwd && isassignment(wordtext)) {
 				*vpp = n;


More information about the busybox mailing list