diff options
Diffstat (limited to 'lib/libc')
-rw-r--r-- | lib/libc/regex/cclass.h | 36 | ||||
-rw-r--r-- | lib/libc/regex/regcomp.c | 61 | ||||
-rw-r--r-- | lib/libc/regex/regex2.h | 7 |
3 files changed, 16 insertions, 88 deletions
diff --git a/lib/libc/regex/cclass.h b/lib/libc/regex/cclass.h index 9a1bea88729..267a1edb254 100644 --- a/lib/libc/regex/cclass.h +++ b/lib/libc/regex/cclass.h @@ -1,4 +1,4 @@ -/* $OpenBSD: cclass.h,v 1.6 2020/10/13 04:42:28 guenther Exp $ */ +/* $OpenBSD: cclass.h,v 1.7 2020/12/30 08:54:42 tb Exp $ */ /*- * Copyright (c) 1992, 1993, 1994 Henry Spencer. @@ -39,30 +39,22 @@ static const struct cclass { const char *name; const char *chars; - const char *multis; } cclasses[] = { { "alnum", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\ -0123456789", ""} , - { "alpha", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", - ""} , - { "blank", " \t", ""} , +0123456789" }, + { "alpha", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" }, + { "blank", " \t" }, { "cntrl", "\007\b\t\n\v\f\r\1\2\3\4\5\6\16\17\20\21\22\23\24\ -\25\26\27\30\31\32\33\34\35\36\37\177", ""} , - { "digit", "0123456789", ""} , +\25\26\27\30\31\32\33\34\35\36\37\177" }, + { "digit", "0123456789" }, { "graph", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\ -0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", - ""} , - { "lower", "abcdefghijklmnopqrstuvwxyz", - ""} , +0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~" }, + { "lower", "abcdefghijklmnopqrstuvwxyz" }, { "print", "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\ -0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ ", - ""} , - { "punct", "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~", - ""} , - { "space", "\t\n\v\f\r ", ""} , - { "upper", "ABCDEFGHIJKLMNOPQRSTUVWXYZ", - ""} , - { "xdigit", "0123456789ABCDEFabcdef", - ""} , - { NULL, 0, "" } +0123456789!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ " }, + { "punct", "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~" }, + { "space", "\t\n\v\f\r " }, + { "upper", "ABCDEFGHIJKLMNOPQRSTUVWXYZ" }, + { "xdigit", "0123456789ABCDEFabcdef" }, + { NULL, 0 } }; diff --git a/lib/libc/regex/regcomp.c b/lib/libc/regex/regcomp.c index d6df4d83d83..fb8b5687060 100644 --- a/lib/libc/regex/regcomp.c +++ b/lib/libc/regex/regcomp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: regcomp.c,v 1.36 2020/12/30 08:53:30 tb Exp $ */ +/* $OpenBSD: regcomp.c,v 1.37 2020/12/30 08:54:42 tb Exp $ */ /*- * Copyright (c) 1992, 1993, 1994 Henry Spencer. * Copyright (c) 1992, 1993, 1994 @@ -90,9 +90,6 @@ static void freeset(struct parse *, cset *); static int freezeset(struct parse *, cset *); static int firstch(struct parse *, cset *); static int nch(struct parse *, cset *); -static void mcadd(struct parse *, cset *, const char *); -static void mcinvert(struct parse *, cset *); -static void mccase(struct parse *, cset *); static int isinsets(struct re_guts *, int); static int samesets(struct re_guts *, int, int); static void categorize(struct parse *, struct re_guts *); @@ -666,8 +663,6 @@ p_bracket(struct parse *p) if (ci != i) CHadd(cs, ci); } - if (cs->multis != NULL) - mccase(p, cs); } if (invert) { int i; @@ -679,12 +674,8 @@ p_bracket(struct parse *p) CHadd(cs, i); if (p->g->cflags®_NEWLINE) CHsub(cs, '\n'); - if (cs->multis != NULL) - mcinvert(p, cs); } - assert(cs->multis == NULL); /* xxx */ - if (nch(p, cs) == 1) { /* optimize singleton sets */ ordinary(p, firstch(p, cs)); freeset(p, cs); @@ -782,8 +773,6 @@ p_b_cclass(struct parse *p, cset *cs) u = cp->chars; while ((c = *u++) != '\0') CHadd(cs, c); - for (u = cp->multis; *u != '\0'; u += strlen(u) + 1) - MCadd(p, cs, u); } /* @@ -1073,8 +1062,6 @@ allocset(struct parse *p) cs->ptr = p->g->setbits + css*((no)/CHAR_BIT); cs->mask = 1 << ((no) % CHAR_BIT); cs->hash = 0; - cs->smultis = 0; - cs->multis = NULL; return(cs); nomem: @@ -1174,52 +1161,6 @@ nch(struct parse *p, cset *cs) } /* - - mcadd - add a collating element to a cset - */ -static void -mcadd( struct parse *p, cset *cs, const char *cp) -{ - size_t oldend = cs->smultis; - void *np; - - cs->smultis += strlen(cp) + 1; - np = realloc(cs->multis, cs->smultis); - if (np == NULL) { - free(cs->multis); - cs->multis = NULL; - SETERROR(REG_ESPACE); - return; - } - cs->multis = np; - - strlcpy(cs->multis + oldend - 1, cp, cs->smultis - oldend + 1); -} - -/* - - mcinvert - invert the list of collating elements in a cset - * - * This would have to know the set of possibilities. Implementation - * is deferred. - */ -static void -mcinvert(struct parse *p, cset *cs) -{ - assert(cs->multis == NULL); /* xxx */ -} - -/* - - mccase - add case counterparts of the list of collating elements in a cset - * - * This would have to know the set of possibilities. Implementation - * is deferred. - */ -static void -mccase(struct parse *p, cset *cs) -{ - assert(cs->multis == NULL); /* xxx */ -} - -/* - isinsets - is this character in any sets? */ static int /* predicate */ diff --git a/lib/libc/regex/regex2.h b/lib/libc/regex/regex2.h index 7484ba26b5a..4098c94a41b 100644 --- a/lib/libc/regex/regex2.h +++ b/lib/libc/regex/regex2.h @@ -1,4 +1,4 @@ -/* $OpenBSD: regex2.h,v 1.8 2013/04/17 17:39:29 tedu Exp $ */ +/* $OpenBSD: regex2.h,v 1.9 2020/12/30 08:54:42 tb Exp $ */ /*- * Copyright (c) 1992, 1993, 1994 Henry Spencer. @@ -106,16 +106,11 @@ typedef struct { uch *ptr; /* -> uch [csetsize] */ uch mask; /* bit within array */ uch hash; /* hash code */ - size_t smultis; - char *multis; /* -> char[smulti] ab\0cd\0ef\0\0 */ } cset; /* note that CHadd and CHsub are unsafe, and CHIN doesn't yield 0/1 */ #define CHadd(cs, c) ((cs)->ptr[(uch)(c)] |= (cs)->mask, (cs)->hash += (c)) #define CHsub(cs, c) ((cs)->ptr[(uch)(c)] &= ~(cs)->mask, (cs)->hash -= (c)) #define CHIN(cs, c) ((cs)->ptr[(uch)(c)] & (cs)->mask) -#define MCadd(p, cs, cp) mcadd(p, cs, cp) /* regcomp() internal fns */ -#define MCsub(p, cs, cp) mcsub(p, cs, cp) -#define MCin(p, cs, cp) mcin(p, cs, cp) /* stuff for character categories */ typedef unsigned char cat_t; |