diff options
author | Rob Landley | 2005-05-18 06:34:37 +0000 |
---|---|---|
committer | Rob Landley | 2005-05-18 06:34:37 +0000 |
commit | 93850a56b2257ca5d0b2bbea82348622d83011b8 (patch) | |
tree | 7fd0b5bfa26882183b865198485c08aa11d9feac /editors | |
parent | 5797c7f0ef93f3efd0ba6634640f9591716214e3 (diff) | |
download | busybox-93850a56b2257ca5d0b2bbea82348622d83011b8.zip busybox-93850a56b2257ca5d0b2bbea82348622d83011b8.tar.gz |
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.
Diffstat (limited to 'editors')
-rw-r--r-- | editors/sed.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/editors/sed.c b/editors/sed.c index 1b6ed2b..a0a127e 100644 --- a/editors/sed.c +++ b/editors/sed.c @@ -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 @@ static char *parse_cmd_args(sed_cmd_t *sed_cmd, char *cmdstr) 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 @@ restart: 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; |