From f39c7c0c86d9f263f372be7c305bffa51af3c21e Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Thu, 28 Feb 2008 17:59:01 +0000 Subject: sed: n cmd must reset "we had successful subst" flag. closes bug 1214. --- editors/sed.c | 5 +++-- testsuite/sed.tests | 6 ++++++ 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 -- cgit v1.2.3