1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-12-24 17:51:17 +03:00
This commit is contained in:
Ulrich Drepper
1999-08-23 17:31:46 +00:00
parent a286028236
commit 539491ac15
2 changed files with 8 additions and 17 deletions

View 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)