aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2004-03-04 23:37:01 +0000
committerUlrich Drepper <drepper@redhat.com>2004-03-04 23:37:01 +0000
commit6fefb4e0b1695a4f7d0d18be6c04472bb3995071 (patch)
tree470549c3fb1120fcca55d882b9911a716b5c92b2
parent4c595adb603a70901433026153e1ff34979ed173 (diff)
downloadglibc-6fefb4e0b1695a4f7d0d18be6c04472bb3995071.tar
glibc-6fefb4e0b1695a4f7d0d18be6c04472bb3995071.tar.gz
glibc-6fefb4e0b1695a4f7d0d18be6c04472bb3995071.tar.bz2
glibc-6fefb4e0b1695a4f7d0d18be6c04472bb3995071.zip
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--ChangeLog5
-rw-r--r--posix/regex.h4
-rw-r--r--posix/regexec.c20
3 files changed, 24 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index d2b5c53ae1..4125b3cef1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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 b4a975b48b..4279dbcc5b 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 cad676c0fe..09142c5f7a 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