From 9c47c43e07365abe1eda02d69572b9e579b49cec Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Wed, 23 Aug 2017 17:56:03 +0200 Subject: [PATCH] sed: in '/regexp/cmd1;//cmd2', cmd2 should use the same regexp as cmd1 function old new delta get_address 165 211 +46 Signed-off-by: Denys Vlasenko --- editors/sed.c | 14 ++++++++++---- testsuite/sed.tests | 6 ++++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/editors/sed.c b/editors/sed.c index 3fc40ceef..7ed9937d2 100644 --- a/editors/sed.c +++ b/editors/sed.c @@ -350,10 +350,16 @@ static int get_address(const char *my_str, int *linenum, regex_t ** regex) if (*my_str == '\\') delimiter = *++pos; next = index_of_next_unescaped_regexp_delim(delimiter, ++pos); - temp = copy_parsing_escapes(pos, next); - *regex = xzalloc(sizeof(regex_t)); - xregcomp(*regex, temp, G.regex_type); - free(temp); + if (next != 0) { + temp = copy_parsing_escapes(pos, next); + G.previous_regex_ptr = *regex = xzalloc(sizeof(regex_t)); + xregcomp(*regex, temp, G.regex_type); + free(temp); + } else { + *regex = G.previous_regex_ptr; + if (!G.previous_regex_ptr) + bb_error_msg_and_die("no previous regexp"); + } /* Move position to next character after last delimiter */ pos += (next+1); } diff --git a/testsuite/sed.tests b/testsuite/sed.tests index 05c00a99b..675cb4f10 100755 --- a/testsuite/sed.tests +++ b/testsuite/sed.tests @@ -387,6 +387,12 @@ testing "sed 's///w FILE'" \ "" \ "123\nqwe\nasd\n" +testing "sed uses previous regexp" \ + "sed '/w/p;//q'" \ + "q\nw\nw\n" \ + "" \ + "q\nw\ne\nr\n" + # testing "description" "commands" "result" "infile" "stdin" exit $FAILCOUNT -- 2.25.1