aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2008-02-28 17:59:01 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2008-02-28 17:59:01 +0000
commitf39c7c0c86d9f263f372be7c305bffa51af3c21e (patch)
tree2cc58af337e3c01d04ad27126a890422af2283f6
parentcd174d1f31632884b717eba69048d338605e7e70 (diff)
downloadbusybox-f39c7c0c86d9f263f372be7c305bffa51af3c21e.tar.gz
sed: n cmd must reset "we had successful subst" flag. closes bug 1214.
-rw-r--r--editors/sed.c5
-rwxr-xr-xtestsuite/sed.tests6
2 files changed, 9 insertions, 2 deletions
diff --git a/editors/sed.c b/editors/sed.c
index e55bcafc4..c2b9e94b6 100644
--- a/editors/sed.c
+++ b/editors/sed.c
@@ -865,7 +865,7 @@ static void process_files(void)
next_line = get_next_line(&next_gets_char);
/* go through every line in each file */
-again:
+ again:
substituted = 0;
/* Advance to next line. Stop if out of lines. */
@@ -877,7 +877,7 @@ again:
* the '$' address */
next_line = get_next_line(&next_gets_char);
linenum++;
-restart:
+ restart:
/* for every line, go through all the commands */
for (sed_cmd = G.sed_cmd_head.next; sed_cmd; sed_cmd = sed_cmd->next) {
int old_matched, matched;
@@ -1053,6 +1053,7 @@ restart:
pattern_space = next_line;
last_gets_char = next_gets_char;
next_line = get_next_line(&next_gets_char);
+ substituted = 0;
linenum++;
break;
}
diff --git a/testsuite/sed.tests b/testsuite/sed.tests
index 7471ed5fc..4cdbaa687 100755
--- a/testsuite/sed.tests
+++ b/testsuite/sed.tests
@@ -201,4 +201,10 @@ testing "sed s/xxx/[/" "sed -e 's/xxx/[/'" "[\n" "" "xxx\n"
#testing "sed -g (exhaustive)" "sed -e 's/[[:space:]]*/,/g'" ",1,2,3,4,5," \
# "" "12345"
+# testing "description" "arguments" "result" "infile" "stdin"
+
+testing "sed n command must reset 'substituted' bit" \
+ "sed 's/1/x/;T;n;: next;s/3/y/;t quit;n;b next;: quit;q'" \
+ "0\nx\n2\ny\n" "" "0\n1\n2\n3\n"
+
exit $FAILCOUNT