aboutsummaryrefslogtreecommitdiff
path: root/lib/libc/regex/regex2.h
diff options
context:
space:
mode:
authorYuri Pankov <yuripv@FreeBSD.org>2018-12-12 04:23:00 +0000
committerYuri Pankov <yuripv@FreeBSD.org>2018-12-12 04:23:00 +0000
commit547bc083d614f3639f5632d9e39d79e828519318 (patch)
treec56e6d9adcf5c64c8748348d13fd59f0566b4511 /lib/libc/regex/regex2.h
parent7bdc329113b8ae853baea30dcf62f6ee3a897ccd (diff)
Notes
Diffstat (limited to 'lib/libc/regex/regex2.h')
-rw-r--r--lib/libc/regex/regex2.h11
1 files changed, 8 insertions, 3 deletions
diff --git a/lib/libc/regex/regex2.h b/lib/libc/regex/regex2.h
index a7c45683229c..a1a37172a55b 100644
--- a/lib/libc/regex/regex2.h
+++ b/lib/libc/regex/regex2.h
@@ -113,7 +113,7 @@ typedef struct {
wint_t max;
} crange;
typedef struct {
- unsigned char bmp[NC / 8];
+ unsigned char bmp[NC_MAX / 8];
wctype_t *types;
unsigned int ntypes;
wint_t *wides;
@@ -133,9 +133,14 @@ CHIN1(cset *cs, wint_t ch)
if (ch < NC)
return (((cs->bmp[ch >> 3] & (1 << (ch & 7))) != 0) ^
cs->invert);
- for (i = 0; i < cs->nwides; i++)
- if (ch == cs->wides[i])
+ for (i = 0; i < cs->nwides; i++) {
+ if (cs->icase) {
+ if (ch == towlower(cs->wides[i]) ||
+ ch == towupper(cs->wides[i]))
+ return (!cs->invert);
+ } else if (ch == cs->wides[i])
return (!cs->invert);
+ }
for (i = 0; i < cs->nranges; i++)
if (cs->ranges[i].min <= ch && ch <= cs->ranges[i].max)
return (!cs->invert);