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 <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2017-08-23 17:56:03 +02:00
parent 8b77a9ea81
commit 9c47c43e07
2 changed files with 16 additions and 4 deletions

View File

@ -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);
}

View File

@ -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