Update.
authorUlrich Drepper <drepper@redhat.com>
Thu, 4 Mar 2004 23:37:01 +0000 (23:37 +0000)
committerUlrich Drepper <drepper@redhat.com>
Thu, 4 Mar 2004 23:37:01 +0000 (23:37 +0000)
2004-01-15  Paolo Bonzini  <bonzini@gnu.org>

* posix/regex.h (REG_STARTEND): Define.
* posix/regexec.c (regexec): Check for REG_STARTEND.

ChangeLog
posix/regex.h
posix/regexec.c

index d2b5c53..4125b3c 100644 (file)
--- 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.
index b4a975b..4279dbc 100644 (file)
@@ -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.  */
index cad676c..09142c5 100644 (file)
@@ -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