diff options
author | Ulrich Drepper <drepper@redhat.com> | 2004-03-04 23:37:01 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2004-03-04 23:37:01 +0000 |
commit | 6fefb4e0b1695a4f7d0d18be6c04472bb3995071 (patch) | |
tree | 470549c3fb1120fcca55d882b9911a716b5c92b2 | |
parent | 4c595adb603a70901433026153e1ff34979ed173 (diff) | |
download | glibc-6fefb4e0b1695a4f7d0d18be6c04472bb3995071.zip glibc-6fefb4e0b1695a4f7d0d18be6c04472bb3995071.tar.gz glibc-6fefb4e0b1695a4f7d0d18be6c04472bb3995071.tar.bz2 |
Update.
2004-01-15 Paolo Bonzini <bonzini@gnu.org>
* posix/regex.h (REG_STARTEND): Define.
* posix/regexec.c (regexec): Check for REG_STARTEND.
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | posix/regex.h | 4 | ||||
-rw-r--r-- | posix/regexec.c | 20 |
3 files changed, 24 insertions, 5 deletions
@@ -1,3 +1,8 @@ +2004-01-15 Paolo Bonzini <bonzini@gnu.org> + + * posix/regex.h (REG_STARTEND): Define. + * posix/regexec.c (regexec): Check for REG_STARTEND. + 2004-02-29 Paolo Bonzini <bonzini@gnu.org> * posix/regexec.c (transit_state): Don't handle state == NULL. diff --git a/posix/regex.h b/posix/regex.h index b4a975b..4279dbc 100644 --- a/posix/regex.h +++ b/posix/regex.h @@ -298,6 +298,10 @@ extern reg_syntax_t re_syntax_options; /* Like REG_NOTBOL, except for the end-of-line. */ #define REG_NOTEOL (1 << 1) +/* Use PMATCH[0] to delimit the start and end of the search in the + buffer. */ +#define REG_STARTEND (1 << 2) + /* If any error codes are removed, changed, or added, update the `re_error_msg' table in regex.c. */ diff --git a/posix/regexec.c b/posix/regexec.c index cad676c..09142c5 100644 --- a/posix/regexec.c +++ b/posix/regexec.c @@ -215,13 +215,23 @@ regexec (preg, string, nmatch, pmatch, eflags) int eflags; { reg_errcode_t err; - int length = strlen (string); + int start, length; + if (eflags & REG_STARTEND) + { + start = pmatch[0].rm_so; + length = pmatch[0].rm_eo; + } + else + { + start = 0; + length = strlen (string); + } if (preg->no_sub) - err = re_search_internal (preg, string, length, 0, length, length, 0, - NULL, eflags); + err = re_search_internal (preg, string, length, start, length - start, + length, 0, NULL, eflags); else - err = re_search_internal (preg, string, length, 0, length, length, nmatch, - pmatch, eflags); + err = re_search_internal (preg, string, length, start, length - start, + length, nmatch, pmatch, eflags); return err != REG_NOERROR; } #ifdef _LIBC |