Module Name: src Committed By: christos Date: Wed Feb 24 18:13:21 UTC 2021
Modified Files: src/lib/libc/regex: engine.c regcomp.c regex2.h regexec.c regfree.c Log Message: reduce casts To generate a diff of this commit: cvs rdiff -u -r1.26 -r1.27 src/lib/libc/regex/engine.c cvs rdiff -u -r1.39 -r1.40 src/lib/libc/regex/regcomp.c cvs rdiff -u -r1.14 -r1.15 src/lib/libc/regex/regex2.h cvs rdiff -u -r1.23 -r1.24 src/lib/libc/regex/regexec.c cvs rdiff -u -r1.16 -r1.17 src/lib/libc/regex/regfree.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/libc/regex/engine.c diff -u src/lib/libc/regex/engine.c:1.26 src/lib/libc/regex/engine.c:1.27 --- src/lib/libc/regex/engine.c:1.26 Wed Feb 24 04:10:12 2021 +++ src/lib/libc/regex/engine.c Wed Feb 24 13:13:21 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: engine.c,v 1.26 2021/02/24 09:10:12 wiz Exp $ */ +/* $NetBSD: engine.c,v 1.27 2021/02/24 18:13:21 christos Exp $ */ /*- * SPDX-License-Identifier: BSD-3-Clause @@ -41,7 +41,7 @@ #ifdef __FBSDID __FBSDID("$FreeBSD: head/lib/libc/regex/engine.c 368358 2020-12-05 03:16:05Z kevans $"); #endif -__RCSID("$NetBSD: engine.c,v 1.26 2021/02/24 09:10:12 wiz Exp $"); +__RCSID("$NetBSD: engine.c,v 1.27 2021/02/24 18:13:21 christos Exp $"); #include <stdbool.h> @@ -210,7 +210,7 @@ matcher(struct re_guts *g, const char *stop; /* Boyer-Moore algorithms variables */ const char *pp; - int cj, mj; + size_t cj, mj; const char *mustfirst; const char *mustlast; size_t *matchjump; @@ -325,7 +325,7 @@ matcher(struct re_guts *g, break; assert(m->coldp < m->endp); m->coldp += XMBRTOWC(NULL, m->coldp, - m->endp - m->coldp, &m->mbs, 0); + (size_t)(m->endp - m->coldp), &m->mbs, 0); } if (nmatch == 1 && !g->backrefs) break; /* no further info needed */ @@ -385,7 +385,7 @@ matcher(struct re_guts *g, NOTE("false alarm"); /* recycle starting later */ start = m->coldp + XMBRTOWC(NULL, m->coldp, - stop - m->coldp, &m->mbs, 0); + (size_t)(stop - m->coldp), &m->mbs, 0); assert(start <= stop); } @@ -412,7 +412,7 @@ done: m->pmatch = NULL; } if (m->lastpos != NULL) { - free((char *)m->lastpos); + free(__UNCONST(m->lastpos)); m->lastpos = NULL; } STATETEARDOWN(m); @@ -461,7 +461,7 @@ dissect( es += OPND(m->g->strip[es]); break; case OCH_: - while (OP(m->g->strip[es]) != (sop)O_CH) + while (OP(m->g->strip[es]) != O_CH) es += OPND(m->g->strip[es]); break; } @@ -473,7 +473,8 @@ dissect( assert(nope); break; case OCHAR: - sp += XMBRTOWC(NULL, sp, stop - start, &m->mbs, 0); + sp += XMBRTOWC(NULL, sp, (size_t)(stop - start), + &m->mbs, 0); break; case OBOL: case OEOL: @@ -486,7 +487,8 @@ dissect( break; case OANY: case OANYOF: - sp += XMBRTOWC(NULL, sp, stop - start, &m->mbs, 0); + sp += XMBRTOWC(NULL, sp, (size_t)(stop - start), + &m->mbs, 0); break; case OBACK_: case O_BACK: @@ -579,7 +581,7 @@ dissect( assert(OP(m->g->strip[esub]) == OOR2); ssub = esub + 1; esub += OPND(m->g->strip[esub]); - if (OP(m->g->strip[esub]) == (sop)OOR2) + if (OP(m->g->strip[esub]) == OOR2) esub--; else assert(OP(m->g->strip[esub]) == O_CH); @@ -669,14 +671,16 @@ backref( case OCHAR: if (sp == stop) return(NULL); - sp += XMBRTOWC(&wc, sp, stop - sp, &m->mbs, BADCHAR); + sp += XMBRTOWC(&wc, sp, (size_t)(stop - sp), + &m->mbs, BADCHAR); if (wc != (wint_t)OPND(s)) return(NULL); break; case OANY: if (sp == stop) return(NULL); - sp += XMBRTOWC(&wc, sp, stop - sp, &m->mbs, BADCHAR); + sp += XMBRTOWC(&wc, sp, (size_t)(stop - sp), + &m->mbs, BADCHAR); if (wc == BADCHAR) return (NULL); break; @@ -684,7 +688,8 @@ backref( if (sp == stop) return (NULL); cs = &m->g->sets[OPND(s)]; - sp += XMBRTOWC(&wc, sp, stop - sp, &m->mbs, BADCHAR); + sp += XMBRTOWC(&wc, sp, (size_t)(stop - sp), + &m->mbs, BADCHAR); if (wc == BADCHAR || !CHIN(cs, wc)) return(NULL); break; @@ -751,7 +756,7 @@ backref( do { assert(OP(s) == OOR2); ss += OPND(s); - } while (OP(s = m->g->strip[ss]) != (sop)O_CH); + } while (OP(s = m->g->strip[ss]) != O_CH); /* note that the ss++ gets us past the O_CH */ break; default: /* have to make a choice */ @@ -784,7 +789,7 @@ backref( ssp = m->offp + m->pmatch[i].rm_so; if (memcmp(sp, ssp, len) != 0) return(NULL); - while (m->g->strip[ss] != (sop)SOP(O_BACK, i)) + while (m->g->strip[ss] != SOP(O_BACK, i)) ss++; return(backref(m, sp+len, stop, ss+1, stopst, lev, rec)); case OQUEST_: /* to null or not */ @@ -816,13 +821,13 @@ backref( if (dp != NULL) return(dp); /* that one missed, try next one */ - if (OP(m->g->strip[esub]) == (sop)O_CH) + if (OP(m->g->strip[esub]) == O_CH) return(NULL); /* there is none */ esub++; - assert(OP(m->g->strip[esub]) == (sop)OOR2); + assert(OP(m->g->strip[esub]) == OOR2); ssub = esub + 1; esub += OPND(m->g->strip[esub]); - if (OP(m->g->strip[esub]) == (sop)OOR2) + if (OP(m->g->strip[esub]) == OOR2) esub--; else assert(OP(m->g->strip[esub]) == O_CH); @@ -877,9 +882,9 @@ walk(struct match *m, const char *start, wint_t c; wint_t lastc; /* previous c */ wint_t flagch; - int i, sflags; + int sflags; const char *matchp; /* last p at which a match ended */ - size_t clen; + size_t i, clen; _DIAGASSERT(m != NULL); _DIAGASSERT(start != NULL); @@ -912,7 +917,8 @@ walk(struct match *m, const char *start, c = OUT; clen = 0; } else - clen = XMBRTOWC(&c, p, m->endp - p, &m->mbs, BADCHAR); + clen = XMBRTOWC(&c, p, (size_t)(m->endp - p), + &m->mbs, BADCHAR); if (fast && EQ(st, fresh)) matchp = p; @@ -1000,7 +1006,8 @@ walk(struct match *m, const char *start, assert(matchp != NULL); m->coldp = matchp; if (ISSET(st, stopst)) - return (p + XMBRTOWC(NULL, p, stop - p, &m->mbs, 0)); + return (p + XMBRTOWC(NULL, p, (size_t)(stop - p), + &m->mbs, 0)); else return (NULL); } else @@ -1121,22 +1128,22 @@ step(struct re_guts *g, break; case OCH_: /* mark the first two branches */ FWD(aft, aft, 1); - assert(OP(g->strip[pc+OPND(s)]) == (sop)OOR2); + assert(OP(g->strip[pc+OPND(s)]) == OOR2); FWD(aft, aft, OPND(s)); break; case OOR1: /* done a branch, find the O_CH */ if (ISSTATEIN(aft, here)) { for (look = 1; - OP(s = g->strip[pc+look]) != (sop)O_CH; + OP(s = g->strip[pc+look]) != O_CH; look += OPND(s)) - assert(OP(s) == (sop)OOR2); + assert(OP(s) == OOR2); FWD(aft, aft, look + 1); } break; case OOR2: /* propagate OCH_'s marking */ FWD(aft, aft, 1); - if (OP(g->strip[pc+OPND(s)]) != (sop)O_CH) { - assert(OP(g->strip[pc+OPND(s)]) == (sop)OOR2); + if (OP(g->strip[pc+OPND(s)]) != O_CH) { + assert(OP(g->strip[pc+OPND(s)]) == OOR2); FWD(aft, aft, OPND(s)); } break; Index: src/lib/libc/regex/regcomp.c diff -u src/lib/libc/regex/regcomp.c:1.39 src/lib/libc/regex/regcomp.c:1.40 --- src/lib/libc/regex/regcomp.c:1.39 Tue Feb 23 17:14:59 2021 +++ src/lib/libc/regex/regcomp.c Wed Feb 24 13:13:21 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: regcomp.c,v 1.39 2021/02/23 22:14:59 christos Exp $ */ +/* $NetBSD: regcomp.c,v 1.40 2021/02/24 18:13:21 christos Exp $ */ /*- * SPDX-License-Identifier: BSD-3-Clause @@ -47,7 +47,7 @@ static char sccsid[] = "@(#)regcomp.c 8.5 (Berkeley) 3/20/94"; __FBSDID("$FreeBSD: head/lib/libc/regex/regcomp.c 368359 2020-12-05 03:18:48Z kevans $"); #endif -__RCSID("$NetBSD: regcomp.c,v 1.39 2021/02/23 22:14:59 christos Exp $"); +__RCSID("$NetBSD: regcomp.c,v 1.40 2021/02/24 18:13:21 christos Exp $"); #define _OPENBSD_SOURCE #define REGEX_GNU_EXTENSIONS @@ -208,8 +208,8 @@ static char nuls[10]; /* place to point #define MUSTSEE(c, e) (REQUIRE(MORE() && PEEK() == (c), e)) #define MUSTEAT(c, e) (REQUIRE(MORE() && GETNEXT() == (c), e)) #define MUSTNOTSEE(c, e) (REQUIRE(!MORE() || PEEK() != (c), e)) -#define EMIT(op, sopnd) doemit(p, (sop)(op), (size_t)(sopnd)) -#define INSERT(op, pos) doinsert(p, (sop)(op), HERE()-(pos)+1, pos) +#define EMIT(op, sopnd) doemit(p, (op), (sopnd)) +#define INSERT(op, pos) doinsert(p, (op), HERE()-(pos)+1, pos) #define AHEAD(pos) dofwd(p, pos, HERE()-(pos)) #define ASTERN(sop, pos) EMIT(sop, HERE()-pos) #define HERE() (p->slen) @@ -264,18 +264,18 @@ regcomp_internal(regex_t * __restrict pr * generically (who are we to stop people from using ~715MB+ * patterns?). */ - maxlen = ((size_t)-1 >> 1) / sizeof(sop) * 2 / 3; + maxlen = ((size_t)-1 >> 1) / sizeof(*p->strip) * 2 / 3; if (len >= maxlen) { - free((char *)g); + free(g); return(REG_ESPACE); } - p->ssize = len/(size_t)2*(size_t)3 + (size_t)1; /* ugh */ + p->ssize = (sopno)(len / 2 * 3 + 1); /* ugh */ assert(p->ssize >= len); p->strip = calloc(p->ssize, sizeof(*p->strip)); p->slen = 0; if (p->strip == NULL) { - free((char *)g); + free(g); return(REG_ESPACE); } @@ -401,7 +401,7 @@ p_ere_exp(struct parse *p, struct branch int count; int count2; #ifdef REGEX_GNU_EXTENSIONS - int i; + size_t i; int handled; #endif sopno subno; @@ -421,7 +421,7 @@ p_ere_exp(struct parse *p, struct branch case '(': (void)REQUIRE(MORE(), REG_EPAREN); p->g->nsub++; - subno = p->g->nsub; + subno = (sopno)p->g->nsub; if (subno < NPAREN) p->pbegin[subno] = HERE(); EMIT(OLPAREN, subno); @@ -727,7 +727,7 @@ static void p_bre_pre_parse(struct parse *p, struct branchc *bc) { - (void) bc; + (void)bc; /* * Does not move cleanly into expression parser because of * ordinary interpration of * at the beginning position of @@ -823,7 +823,7 @@ p_simp_re(struct parse *p, struct branch int count2; sopno pos; bool handled; - int i; + size_t i; wint_t wc; sopno subno; # define BACKSL (1<<CHAR_BIT) @@ -887,7 +887,7 @@ p_simp_re(struct parse *p, struct branch break; case BACKSL|'(': p->g->nsub++; - subno = p->g->nsub; + subno = (sopno)p->g->nsub; if (subno < NPAREN) p->pbegin[subno] = HERE(); EMIT(OLPAREN, subno); @@ -1053,7 +1053,7 @@ p_bracket(struct parse *p) ordinary(p, ch); freeset(p, cs); } else - EMIT(OANYOF, (int)(cs - p->g->sets)); + EMIT(OANYOF, (size_t)(cs - p->g->sets)); } static int @@ -1189,7 +1189,7 @@ p_b_pseudoclass(struct parse *p, char c) return(0); } - EMIT(OANYOF, (int)(cs - p->g->sets)); + EMIT(OANYOF, (size_t)(cs - p->g->sets)); return(1); } #endif @@ -1416,8 +1416,8 @@ ordinary(struct parse *p, wint_t ch) if ((p->g->cflags®_ICASE) && iswalpha(ch) && othercase(ch) != ch) bothcases(p, ch); - else if ((ch & OPDMASK) == ch) - EMIT(OCHAR, ch); + else if ((wint_t)(ch & OPDMASK) == ch) + EMIT(OCHAR, (size_t)ch); else { /* * Kludge: character is too big to fit into an OCHAR operand. @@ -1426,7 +1426,7 @@ ordinary(struct parse *p, wint_t ch) if ((cs = allocset(p)) == NULL) return; CHadd(p, cs, ch); - EMIT(OANYOF, (int)(cs - p->g->sets)); + EMIT(OANYOF, (size_t)(cs - p->g->sets)); } } @@ -1543,7 +1543,7 @@ wgetnext(struct parse *p) size_t n; memset(&mbs, 0, sizeof(mbs)); - n = mbrtowc(&wc, p->next, p->end - p->next, &mbs); + n = mbrtowc(&wc, p->next, (size_t)(p->end - p->next), &mbs); if (n == (size_t)-1 || n == (size_t)-2) { SETERROR(REG_ILLSEQ); return (0); @@ -1652,7 +1652,7 @@ CHadd(struct parse *p, cset *cs, wint_t assert(ch >= 0); if (ch < NC) - cs->bmp[ch >> 3] |= 1 << (ch & 7); + cs->bmp[(unsigned)ch >> 3] |= 1 << (ch & 7); else { newwides = reallocarray(cs->wides, cs->nwides + 1, sizeof(*cs->wides)); @@ -1665,9 +1665,9 @@ CHadd(struct parse *p, cset *cs, wint_t } if (cs->icase) { if ((nch = towlower(ch)) < NC) - cs->bmp[nch >> 3] |= 1 << (nch & 7); + cs->bmp[(unsigned)nch >> 3] |= 1 << (nch & 7); if ((nch = towupper(ch)) < NC) - cs->bmp[nch >> 3] |= 1 << (nch & 7); + cs->bmp[(unsigned)nch >> 3] |= 1 << (nch & 7); } } @@ -1742,8 +1742,8 @@ dupl(struct parse *p, return(ret); if (!enlarge(p, p->ssize + len)) /* this many unexpected additions */ return(ret); - (void) memcpy((char *)(p->strip + p->slen), - (char *)(p->strip + start), (size_t)len*sizeof(sop)); + (void) memcpy(p->strip + p->slen, + p->strip + start, len * sizeof(*p->strip)); p->slen += len; return(ret); } @@ -1774,7 +1774,7 @@ doemit(struct parse *p, sop op, size_t o return; /* finally, it's all reduced to the easy case */ - p->strip[p->slen++] = SOP(op, opnd); + p->strip[p->slen++] = (sopno)SOP(op, opnd); } /* @@ -1810,8 +1810,8 @@ doinsert(struct parse *p, sop op, size_t } } - memmove((char *)&p->strip[pos+1], (char *)&p->strip[pos], - (HERE()-pos-1)*sizeof(sop)); + memmove(&p->strip[pos+1], &p->strip[pos], + (HERE()-pos-1)*sizeof(*p->strip)); p->strip[pos] = s; } @@ -1847,7 +1847,7 @@ enlarge(struct parse *p, sopno size) if (p->ssize >= size) return 1; - sp = reallocarray(p->strip, size, sizeof(sop)); + sp = reallocarray(p->strip, size, sizeof(*p->strip)); if (sp == NULL) { SETERROR(REG_ESPACE); return 0; @@ -1869,7 +1869,7 @@ stripsnug(struct parse *p, struct re_gut _DIAGASSERT(g != NULL); g->nstates = p->slen; - g->strip = reallocarray((char *)p->strip, p->slen, sizeof(sop)); + g->strip = reallocarray(p->strip, p->slen, sizeof(*p->strip)); if (g->strip == NULL) { SETERROR(REG_ESPACE); g->strip = p->strip; @@ -1931,10 +1931,10 @@ findmust(struct parse *p, struct re_guts memset(&mbs, 0, sizeof(mbs)); newstart = scan - 1; } - clen = wcrtomb(buf, OPND(s), &mbs); + clen = wcrtomb(buf, (int)OPND(s), &mbs); if (clen == (size_t)-1) goto toohard; - newlen += clen; + newlen += (sopno)clen; break; case OPLUS_: /* things that don't break one */ case OLPAREN: @@ -1948,12 +1948,12 @@ findmust(struct parse *p, struct re_guts scan += OPND(s); s = *scan; /* assert() interferes w debug printouts */ - if (OP(s) != (sop)O_QUEST && - OP(s) != (sop)O_CH && OP(s) != (sop)OOR2) { + if (OP(s) != O_QUEST && + OP(s) != O_CH && OP(s) != OOR2) { g->iflags |= BAD; return; } - } while (OP(s) != (sop)O_QUEST && OP(s) != (sop)O_CH); + } while (OP(s) != O_QUEST && OP(s) != O_CH); /* FALLTHROUGH */ case OBOW: /* things that break a sequence */ case OEOW: @@ -2015,7 +2015,7 @@ findmust(struct parse *p, struct re_guts offset++; newlen = 0; break; - toohard: + toohard:/*FALLTHROUGH*/ default: /* Anything here makes it impossible or too hard * to calculate the offset -- so we give up; @@ -2054,7 +2054,7 @@ findmust(struct parse *p, struct re_guts while (cp < g->must + g->mlen) { while (OP(s = *scan++) != OCHAR) continue; - clen = wcrtomb(cp, OPND(s), &mbs); + clen = wcrtomb(cp, (int)OPND(s), &mbs); assert(clen != (size_t)-1); cp += clen; } @@ -2085,7 +2085,7 @@ altoffset(sop *scan, int offset) largest = 0; try = 0; s = *scan++; - while (OP(s) != (sop)O_QUEST && OP(s) != (sop)O_CH) { + while (OP(s) != O_QUEST && OP(s) != O_CH) { switch (OP(s)) { case OOR1: if (try > largest) @@ -2101,10 +2101,10 @@ altoffset(sop *scan, int offset) do { scan += OPND(s); s = *scan; - if (OP(s) != (sop)O_QUEST && - OP(s) != (sop)O_CH && OP(s) != (sop)OOR2) + if (OP(s) != O_QUEST && + OP(s) != O_CH && OP(s) != OOR2) return -1; - } while (OP(s) != (sop)O_QUEST && OP(s) != (sop)O_CH); + } while (OP(s) != O_QUEST && OP(s) != O_CH); /* We must skip to the next position, or we'll * leave altoffset() too early. */ @@ -2114,6 +2114,7 @@ altoffset(sop *scan, int offset) case OCHAR: case OANY: try++; + /*FALLTHROUGH*/ case OBOW: case OEOW: case OWBND: Index: src/lib/libc/regex/regex2.h diff -u src/lib/libc/regex/regex2.h:1.14 src/lib/libc/regex/regex2.h:1.15 --- src/lib/libc/regex/regex2.h:1.14 Tue Feb 23 17:14:59 2021 +++ src/lib/libc/regex/regex2.h Wed Feb 24 13:13:21 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: regex2.h,v 1.14 2021/02/23 22:14:59 christos Exp $ */ +/* $NetBSD: regex2.h,v 1.15 2021/02/24 18:13:21 christos Exp $ */ /*- * SPDX-License-Identifier: BSD-3-Clause @@ -76,40 +76,40 @@ * In state representations, an operator's bit is on to signify a state * immediately *preceding* "execution" of that operator. */ -typedef unsigned long sop; /* strip operator */ -typedef unsigned long sopno; -#define OPRMASK 0xf8000000L -#define OPDMASK 0x07ffffffL -#define OPSHIFT ((unsigned)27) +typedef uint32_t sop; /* strip operator */ +typedef uint32_t sopno; +#define OPRMASK 0xf8000000U +#define OPDMASK 0x07ffffffU +#define OPSHIFT (27U) #define OP(n) ((n)&OPRMASK) #define OPND(n) ((n)&OPDMASK) #define SOP(op, opnd) ((op)|(opnd)) /* operators meaning operand */ /* (back, fwd are offsets) */ -#define OEND (1L<<OPSHIFT) /* endmarker - */ -#define OCHAR (2L<<OPSHIFT) /* character wide character */ -#define OBOL (3L<<OPSHIFT) /* left anchor - */ -#define OEOL (4L<<OPSHIFT) /* right anchor - */ -#define OANY (5L<<OPSHIFT) /* . - */ -#define OANYOF (6L<<OPSHIFT) /* [...] set number */ -#define OBACK_ (7L<<OPSHIFT) /* begin \d paren number */ -#define O_BACK (8L<<OPSHIFT) /* end \d paren number */ -#define OPLUS_ (9L<<OPSHIFT) /* + prefix fwd to suffix */ -#define O_PLUS (10L<<OPSHIFT) /* + suffix back to prefix */ -#define OQUEST_ (11L<<OPSHIFT) /* ? prefix fwd to suffix */ -#define O_QUEST (12L<<OPSHIFT) /* ? suffix back to prefix */ -#define OLPAREN (13L<<OPSHIFT) /* ( fwd to ) */ -#define ORPAREN (14L<<OPSHIFT) /* ) back to ( */ -#define OCH_ (15L<<OPSHIFT) /* begin choice fwd to OOR2 */ -#define OOR1 (16L<<OPSHIFT) /* | pt. 1 back to OOR1 or OCH_ */ -#define OOR2 (17L<<OPSHIFT) /* | pt. 2 fwd to OOR2 or O_CH */ -#define O_CH (18L<<OPSHIFT) /* end choice back to OOR1 */ -#define OBOW (19L<<OPSHIFT) /* begin word - */ -#define OEOW (20L<<OPSHIFT) /* end word - */ -#define OBOS (21L<<OPSHIFT) /* begin subj. - */ -#define OEOS (22L<<OPSHIFT) /* end subj. - */ -#define OWBND (23L<<OPSHIFT) /* word bound - */ -#define ONWBND (24L<<OPSHIFT) /* not bound - */ +#define OEND (1U<<OPSHIFT) /* endmarker - */ +#define OCHAR (2U<<OPSHIFT) /* character wide character */ +#define OBOL (3U<<OPSHIFT) /* left anchor - */ +#define OEOL (4U<<OPSHIFT) /* right anchor - */ +#define OANY (5U<<OPSHIFT) /* . - */ +#define OANYOF (6U<<OPSHIFT) /* [...] set number */ +#define OBACK_ (7U<<OPSHIFT) /* begin \d paren number */ +#define O_BACK (8U<<OPSHIFT) /* end \d paren number */ +#define OPLUS_ (9U<<OPSHIFT) /* + prefix fwd to suffix */ +#define O_PLUS (10U<<OPSHIFT) /* + suffix back to prefix */ +#define OQUEST_ (11U<<OPSHIFT) /* ? prefix fwd to suffix */ +#define O_QUEST (12U<<OPSHIFT) /* ? suffix back to prefix */ +#define OLPAREN (13U<<OPSHIFT) /* ( fwd to ) */ +#define ORPAREN (14U<<OPSHIFT) /* ) back to ( */ +#define OCH_ (15U<<OPSHIFT) /* begin choice fwd to OOR2 */ +#define OOR1 (16U<<OPSHIFT) /* | pt. 1 back to OOR1 or OCH_ */ +#define OOR2 (17U<<OPSHIFT) /* | pt. 2 fwd to OOR2 or O_CH */ +#define O_CH (18U<<OPSHIFT) /* end choice back to OOR1 */ +#define OBOW (19U<<OPSHIFT) /* begin word - */ +#define OEOW (20U<<OPSHIFT) /* end word - */ +#define OBOS (21U<<OPSHIFT) /* begin subj. - */ +#define OEOS (22U<<OPSHIFT) /* end subj. - */ +#define OWBND (23U<<OPSHIFT) /* word bound - */ +#define ONWBND (24U<<OPSHIFT) /* not bound - */ /* * Structures for [] character-set representation. @@ -137,7 +137,7 @@ CHIN1(cset *cs, wint_t ch) assert(ch >= 0); if (ch < NC) - return (((cs->bmp[ch >> 3] & (1 << (ch & 7))) != 0) ^ + return (((cs->bmp[(unsigned)ch >> 3] & (1 << (ch & 7))) != 0) ^ cs->invert); for (i = 0; i < cs->nwides; i++) { if (cs->icase) { @@ -162,7 +162,7 @@ CHIN(cset *cs, wint_t ch) assert(ch >= 0); if (ch < NC) - return (((cs->bmp[ch >> 3] & (1 << (ch & 7))) != 0) ^ + return (((cs->bmp[(unsigned)ch >> 3] & (1 << (ch & 7))) != 0) ^ cs->invert); else if (cs->icase) return (CHIN1(cs, ch) || CHIN1(cs, towlower(ch)) || Index: src/lib/libc/regex/regexec.c diff -u src/lib/libc/regex/regexec.c:1.23 src/lib/libc/regex/regexec.c:1.24 --- src/lib/libc/regex/regexec.c:1.23 Tue Feb 23 17:14:59 2021 +++ src/lib/libc/regex/regexec.c Wed Feb 24 13:13:21 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: regexec.c,v 1.23 2021/02/23 22:14:59 christos Exp $ */ +/* $NetBSD: regexec.c,v 1.24 2021/02/24 18:13:21 christos Exp $ */ /*- * SPDX-License-Identifier: BSD-3-Clause @@ -42,7 +42,7 @@ static char sccsid[] = "@(#)regexec.c 8.3 (Berkeley) 3/20/94"; __FBSDID("$FreeBSD: head/lib/libc/regex/regexec.c 326025 2017-11-20 19:49:47Z pfg $"); #endif -__RCSID("$NetBSD: regexec.c,v 1.23 2021/02/23 22:14:59 christos Exp $"); +__RCSID("$NetBSD: regexec.c,v 1.24 2021/02/24 18:13:21 christos Exp $"); /* * the outer shell of regexec() @@ -70,8 +70,6 @@ __weak_alias(regexec,_regexec) #include "utils.h" #include "regex2.h" -static int nope __unused = 0; /* for use in asserts; shuts lint up */ - static __inline size_t xmbrtowc(wint_t *wi, const char *s, size_t n, mbstate_t *mbs, wint_t dummy) { Index: src/lib/libc/regex/regfree.c diff -u src/lib/libc/regex/regfree.c:1.16 src/lib/libc/regex/regfree.c:1.17 --- src/lib/libc/regex/regfree.c:1.16 Tue Feb 23 17:14:59 2021 +++ src/lib/libc/regex/regfree.c Wed Feb 24 13:13:21 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: regfree.c,v 1.16 2021/02/23 22:14:59 christos Exp $ */ +/* $NetBSD: regfree.c,v 1.17 2021/02/24 18:13:21 christos Exp $ */ /*- * SPDX-License-Identifier: BSD-3-Clause @@ -42,7 +42,7 @@ static char sccsid[] = "@(#)regfree.c 8.3 (Berkeley) 3/20/94"; __FBSDID("$FreeBSD: head/lib/libc/regex/regfree.c 326025 2017-11-20 19:49:47Z pfg $"); #endif -__RCSID("$NetBSD: regfree.c,v 1.16 2021/02/23 22:14:59 christos Exp $"); +__RCSID("$NetBSD: regfree.c,v 1.17 2021/02/24 18:13:21 christos Exp $"); #include "namespace.h" #include <sys/types.h> @@ -83,14 +83,14 @@ regfree(regex_t *preg) g->magic = 0; /* mark it invalid */ if (g->strip != NULL) - free((char *)g->strip); + free(g->strip); if (g->sets != NULL) { for (i = 0; i < g->ncsets; i++) { free(g->sets[i].ranges); free(g->sets[i].wides); free(g->sets[i].types); } - free((char *)g->sets); + free(g->sets); } if (g->must != NULL) free(g->must); @@ -98,5 +98,5 @@ regfree(regex_t *preg) free(&g->charjump[CHAR_MIN]); if (g->matchjump != NULL) free(g->matchjump); - free((char *)g); + free(g); }