[BusyBox-cvs] svn commit: trunk/busybox: editors testsuite/sed

landley at busybox.net landley at busybox.net
Wed May 18 06:34:39 UTC 2005


Author: landley
Date: 2005-05-18 00:34:37 -0600 (Wed, 18 May 2005)
New Revision: 10347

Log:
Patch from Colin Watson (mangled slightly by Rob Landley):

This patch implements the 'T' command in sed. This is a GNU extension,
but one of the udev hotplug scripts uses it, so I need it in busybox
anyway.

Includes a test; 'svn add testsuite/sed/sed-branch-conditional-inverted'
after applying.



Added:
   trunk/busybox/testsuite/sed/sed-branch-conditional-inverted

Modified:
   trunk/busybox/editors/sed.c


Changeset:
Modified: trunk/busybox/editors/sed.c
===================================================================
--- trunk/busybox/editors/sed.c	2005-05-18 05:56:16 UTC (rev 10346)
+++ trunk/busybox/editors/sed.c	2005-05-18 06:34:37 UTC (rev 10347)
@@ -57,7 +57,7 @@
 	 - grouped commands: {cmd1;cmd2}
 	 - transliteration (y/source-chars/dest-chars/)
 	 - pattern space hold space storing / swapping (g, h, x)
-	 - labels / branching (: label, b, t)
+	 - labels / branching (: label, b, t, T)
 
 	 (Note: Specifying an address (range) to match is *optional*; commands
 	 default to the whole pattern space if no specific address match was
@@ -65,7 +65,7 @@
 
 	Unsupported features:
 
-	 - GNU extensions
+	 - most GNU extensions
 	 - and more.
 
 	Todo:
@@ -440,7 +440,7 @@
 		if(sed_cmd->cmd=='w')
 			sed_cmd->file=bb_xfopen(sed_cmd->string,"w");
 	/* handle branch commands */
-	} else if (strchr(":bt", sed_cmd->cmd)) {
+	} else if (strchr(":btT", sed_cmd->cmd)) {
 		int length;
 
 		while(isspace(*cmdstr)) cmdstr++;
@@ -1000,11 +1000,15 @@
 						break;
 					}
 
-					/* Test if substition worked, branch if so. */
+					/* Test/branch if substitution occurred */
 					case 't':
-						if (!substituted) break;
+						if(!substituted) break;
 						substituted=0;
-							/* Fall through */
+						/* Fall through */
+					/* Test/branch if substitution didn't occur */
+					case 'T':
+						if (substituted) break;
+						/* Fall through */
 					/* Branch to label */
 					case 'b':
 						if (!sed_cmd->string) goto discard_commands;

Added: trunk/busybox/testsuite/sed/sed-branch-conditional-inverted
===================================================================
--- trunk/busybox/testsuite/sed/sed-branch-conditional-inverted	2005-05-18 05:56:16 UTC (rev 10346)
+++ trunk/busybox/testsuite/sed/sed-branch-conditional-inverted	2005-05-18 06:34:37 UTC (rev 10347)
@@ -0,0 +1,14 @@
+busybox sed 's/a/1/;T notone;p;: notone;p'>output <<EOF
+a
+b
+c
+EOF
+cmp -s output - <<EOF
+1
+1
+1
+b
+b
+c
+c
+EOF


Property changes on: trunk/busybox/testsuite/sed/sed-branch-conditional-inverted
___________________________________________________________________
Name: svn:executable
   + *




More information about the busybox-cvs mailing list