aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Griebl <griebl@gmx.de>2002-08-06 23:13:31 +0000
committerRobert Griebl <griebl@gmx.de>2002-08-06 23:13:31 +0000
commit00f5ecb141caaa0b77bb8f3090ff95ac52458699 (patch)
treef1422f5f5968287fafddb83db1fa08890a511a9b
parent7940147e2516b7042cff956acb98aca39007fdb8 (diff)
downloadbusybox-w32-00f5ecb141caaa0b77bb8f3090ff95ac52458699.tar.gz
busybox-w32-00f5ecb141caaa0b77bb8f3090ff95ac52458699.tar.bz2
busybox-w32-00f5ecb141caaa0b77bb8f3090ff95ac52458699.zip
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)
-rw-r--r--editors/sed.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/editors/sed.c b/editors/sed.c
index 5fc3a14a5..23e9d545b 100644
--- a/editors/sed.c
+++ b/editors/sed.c
@@ -178,7 +178,7 @@ static int index_of_next_unescaped_regexp_delim(const struct sed_cmd * const sed
178static int get_address(struct sed_cmd *sed_cmd, const char *str, int *linenum, regex_t **regex) 178static int get_address(struct sed_cmd *sed_cmd, const char *str, int *linenum, regex_t **regex)
179{ 179{
180 char *my_str = xstrdup(str); 180 char *my_str = xstrdup(str);
181 int idx = 0; 181 int idx = 0, idx_start = 1;
182 char olddelimiter; 182 char olddelimiter;
183 olddelimiter = sed_cmd->delimiter; 183 olddelimiter = sed_cmd->delimiter;
184 sed_cmd->delimiter = '/'; 184 sed_cmd->delimiter = '/';
@@ -196,7 +196,7 @@ static int get_address(struct sed_cmd *sed_cmd, const char *str, int *linenum, r
196 } 196 }
197 else if (my_str[idx] == '/' || my_str[idx] == '\\') { 197 else if (my_str[idx] == '/' || my_str[idx] == '\\') {
198 if (my_str[idx] == '\\') { 198 if (my_str[idx] == '\\') {
199 my_str[idx] = 0; 199 idx_start++;
200 sed_cmd-> delimiter = my_str[++idx]; 200 sed_cmd-> delimiter = my_str[++idx];
201 } 201 }
202 idx = index_of_next_unescaped_regexp_delim(sed_cmd, my_str, ++idx); 202 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
204 error_msg_and_die("unterminated match expression"); 204 error_msg_and_die("unterminated match expression");
205 my_str[idx] = '\0'; 205 my_str[idx] = '\0';
206 *regex = (regex_t *)xmalloc(sizeof(regex_t)); 206 *regex = (regex_t *)xmalloc(sizeof(regex_t));
207 xregcomp(*regex, my_str+1, REG_NEWLINE); 207 xregcomp(*regex, my_str+idx_start, REG_NEWLINE);
208 idx++; /* so it points to the next character after the last '/' */ 208 idx++; /* so it points to the next character after the last '/' */
209 } 209 }
210 else { 210 else {
@@ -401,7 +401,7 @@ static char *parse_cmd_str(struct sed_cmd * const sed_cmd, const char *const cmd
401 */ 401 */
402 402
403 /* first part (if present) is an address: either a number or a /regex/ */ 403 /* first part (if present) is an address: either a number or a /regex/ */
404 if (isdigit(cmdstr[idx]) || cmdstr[idx] == '/') 404 if (isdigit(cmdstr[idx]) || cmdstr[idx] == '/' || ( cmdstr[idx] == '\\' && cmdstr[idx+1] != '\\'))
405 idx = get_address(sed_cmd, cmdstr, &sed_cmd->beg_line, &sed_cmd->beg_match); 405 idx = get_address(sed_cmd, cmdstr, &sed_cmd->beg_line, &sed_cmd->beg_match);
406 406
407 /* second part (if present) will begin with a comma */ 407 /* second part (if present) will begin with a comma */