cclasses[] multis field is always an empty string. Remove it and code
dealing with it. This code was incomplete anyway.

Index: cclass.h
===================================================================
RCS file: /OpenBSD/src/lib/libc/regex/cclass.h,v
retrieving revision 1.6
diff -u -p -r1.6 cclass.h
--- cclass.h    13 Oct 2020 04:42:28 -0000      1.6
+++ cclass.h    29 Dec 2020 09:30:53 -0000
@@ -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 }
 };
Index: regcomp.c
===================================================================
RCS file: /OpenBSD/src/lib/libc/regex/regcomp.c,v
retrieving revision 1.35
diff -u -p -r1.35 regcomp.c
--- regcomp.c   13 Oct 2020 04:42:28 -0000      1.35
+++ regcomp.c   29 Dec 2020 09:30:53 -0000
@@ -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&REG_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:
@@ -1171,52 +1158,6 @@ nch(struct parse *p, cset *cs)
                if (CHIN(cs, i))
                        n++;
        return(n);
-}
-
-/*
- - 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 */
 }
 
 /*
Index: regex2.h
===================================================================
RCS file: /OpenBSD/src/lib/libc/regex/regex2.h,v
retrieving revision 1.8
diff -u -p -r1.8 regex2.h
--- regex2.h    17 Apr 2013 17:39:29 -0000      1.8
+++ regex2.h    29 Dec 2020 09:30:53 -0000
@@ -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;

Reply via email to