Somehow I applied an old patch for the last commit - this one works now:
- Added \CregexC support to sed (sed testsuite reported no errors, btw)
This commit is contained in:
parent
7940147e25
commit
00f5ecb141
@ -178,7 +178,7 @@ static int index_of_next_unescaped_regexp_delim(const struct sed_cmd * const sed
|
|||||||
static int get_address(struct sed_cmd *sed_cmd, const char *str, int *linenum, regex_t **regex)
|
static int get_address(struct sed_cmd *sed_cmd, const char *str, int *linenum, regex_t **regex)
|
||||||
{
|
{
|
||||||
char *my_str = xstrdup(str);
|
char *my_str = xstrdup(str);
|
||||||
int idx = 0;
|
int idx = 0, idx_start = 1;
|
||||||
char olddelimiter;
|
char olddelimiter;
|
||||||
olddelimiter = sed_cmd->delimiter;
|
olddelimiter = sed_cmd->delimiter;
|
||||||
sed_cmd->delimiter = '/';
|
sed_cmd->delimiter = '/';
|
||||||
@ -196,7 +196,7 @@ static int get_address(struct sed_cmd *sed_cmd, const char *str, int *linenum, r
|
|||||||
}
|
}
|
||||||
else if (my_str[idx] == '/' || my_str[idx] == '\\') {
|
else if (my_str[idx] == '/' || my_str[idx] == '\\') {
|
||||||
if (my_str[idx] == '\\') {
|
if (my_str[idx] == '\\') {
|
||||||
my_str[idx] = 0;
|
idx_start++;
|
||||||
sed_cmd-> delimiter = my_str[++idx];
|
sed_cmd-> delimiter = my_str[++idx];
|
||||||
}
|
}
|
||||||
idx = index_of_next_unescaped_regexp_delim(sed_cmd, my_str, ++idx);
|
idx = index_of_next_unescaped_regexp_delim(sed_cmd, my_str, ++idx);
|
||||||
@ -204,7 +204,7 @@ static int get_address(struct sed_cmd *sed_cmd, const char *str, int *linenum, r
|
|||||||
error_msg_and_die("unterminated match expression");
|
error_msg_and_die("unterminated match expression");
|
||||||
my_str[idx] = '\0';
|
my_str[idx] = '\0';
|
||||||
*regex = (regex_t *)xmalloc(sizeof(regex_t));
|
*regex = (regex_t *)xmalloc(sizeof(regex_t));
|
||||||
xregcomp(*regex, my_str+1, REG_NEWLINE);
|
xregcomp(*regex, my_str+idx_start, REG_NEWLINE);
|
||||||
idx++; /* so it points to the next character after the last '/' */
|
idx++; /* so it points to the next character after the last '/' */
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -401,7 +401,7 @@ static char *parse_cmd_str(struct sed_cmd * const sed_cmd, const char *const cmd
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* first part (if present) is an address: either a number or a /regex/ */
|
/* first part (if present) is an address: either a number or a /regex/ */
|
||||||
if (isdigit(cmdstr[idx]) || cmdstr[idx] == '/')
|
if (isdigit(cmdstr[idx]) || cmdstr[idx] == '/' || ( cmdstr[idx] == '\\' && cmdstr[idx+1] != '\\'))
|
||||||
idx = get_address(sed_cmd, cmdstr, &sed_cmd->beg_line, &sed_cmd->beg_match);
|
idx = get_address(sed_cmd, cmdstr, &sed_cmd->beg_line, &sed_cmd->beg_match);
|
||||||
|
|
||||||
/* second part (if present) will begin with a comma */
|
/* second part (if present) will begin with a comma */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user