158 |
|
|
159 |
if (length > md->end_subject - eptr) return FALSE; |
if (length > md->end_subject - eptr) return FALSE; |
160 |
|
|
161 |
/* Separate the caselesss case for speed */ |
/* Separate the caseless case for speed. In UTF-8 mode we can only do this |
162 |
|
properly if Unicode properties are supported. Otherwise, we can check only |
163 |
|
ASCII characters. */ |
164 |
|
|
165 |
if ((ims & PCRE_CASELESS) != 0) |
if ((ims & PCRE_CASELESS) != 0) |
166 |
{ |
{ |
167 |
|
#ifdef SUPPORT_UTF8 |
168 |
|
#ifdef SUPPORT_UCP |
169 |
|
if (md->utf8) |
170 |
|
{ |
171 |
|
USPTR endptr = eptr + length; |
172 |
|
while (eptr < endptr) |
173 |
|
{ |
174 |
|
int c, d; |
175 |
|
GETCHARINC(c, eptr); |
176 |
|
GETCHARINC(d, p); |
177 |
|
if (c != d && c != UCD_OTHERCASE(d)) return FALSE; |
178 |
|
} |
179 |
|
} |
180 |
|
else |
181 |
|
#endif |
182 |
|
#endif |
183 |
|
|
184 |
|
/* The same code works when not in UTF-8 mode and in UTF-8 mode when there |
185 |
|
is no UCP support. */ |
186 |
|
|
187 |
while (length-- > 0) |
while (length-- > 0) |
188 |
if (md->lcc[*p++] != md->lcc[*eptr++]) return FALSE; |
{ if (md->lcc[*p++] != md->lcc[*eptr++]) return FALSE; } |
189 |
} |
} |
190 |
|
|
191 |
|
/* In the caseful case, we can just compare the bytes, whether or not we |
192 |
|
are in UTF-8 mode. */ |
193 |
|
|
194 |
else |
else |
195 |
{ while (length-- > 0) if (*p++ != *eptr++) return FALSE; } |
{ while (length-- > 0) if (*p++ != *eptr++) return FALSE; } |
196 |
|
|
1695 |
break; |
break; |
1696 |
|
|
1697 |
case PT_GC: |
case PT_GC: |
1698 |
if ((ecode[2] != ucp_gentype[prop->chartype]) == (op == OP_PROP)) |
if ((ecode[2] != _pcre_ucp_gentype[prop->chartype]) == (op == OP_PROP)) |
1699 |
RRETURN(MATCH_NOMATCH); |
RRETURN(MATCH_NOMATCH); |
1700 |
break; |
break; |
1701 |
|
|