Update.
authorUlrich Drepper <drepper@redhat.com>
Mon, 23 Aug 1999 17:31:46 +0000 (17:31 +0000)
committerUlrich Drepper <drepper@redhat.com>
Mon, 23 Aug 1999 17:31:46 +0000 (17:31 +0000)
ChangeLog
posix/regex.c

index 9b6bcf1..bbe67a7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,7 +3,6 @@
        * posix/regexbug1.c: Make it an error if the test fails.
 
 1999-08-23  Andreas Schwab  <schwab@suse.de>
-           Ulrich Drepper  <drepper@cygnus.com>
 
        * posix/regex.c (re_match_2_internal): Correct check for charset
        after exactn in loop.
index 1bd0191..16e91f1 100644 (file)
@@ -4833,23 +4833,15 @@ re_match_2_internal (bufp, string1, size1, string2, size2, pos, regs, stop)
              }
             else if ((re_opcode_t) *p2 == charset)
              {
-                if ((re_opcode_t) p1[3] == exactn)
+               /* We win if the first character of the loop is not part
+                   of the charset.  */
+                if ((re_opcode_t) p1[3] == exactn
+                   && ! ((int) p2[1] * BYTEWIDTH > (int) p1[5]
+                         && (p2[2 + p1[5] / BYTEWIDTH]
+                             & (1 << (p1[5] % BYTEWIDTH)))))
                  {
-                   unsigned char *p1end = &p1[5] + p1[4];
-                   unsigned char *runp1 = &p1[5];
-
-                   while (runp1 < p1end)
-                     {
-                       if ((int) p2[1] * BYTEWIDTH <= (int) *runp1
-                           || (p2[2 + *runp1 / BYTEWIDTH]
-                               & (1 << (*runp1 % BYTEWIDTH))) == 0)
-                         {
-                           p[-3] = (unsigned char) pop_failure_jump;
-                           DEBUG_PRINT1 ("  No match => pop_failure_jump.\n");
-                           break;
-                         }
-                       ++runp1;
-                     }
+                   p[-3] = (unsigned char) pop_failure_jump;
+                   DEBUG_PRINT1 ("  No match => pop_failure_jump.\n");
                   }
 
                else if ((re_opcode_t) p1[3] == charset_not)