diff options
author | Sascha Schumann <sas@php.net> | 1999-11-12 20:27:52 +0000 |
---|---|---|
committer | Sascha Schumann <sas@php.net> | 1999-11-12 20:27:52 +0000 |
commit | 6f572248907b8489b360ed2f030c10a2f5bb2e67 (patch) | |
tree | e5ff355bae61dce747aa699b24bdaabc025e8c45 /regex/regcomp.c | |
parent | e20e9786b3a1de2f209df560c43e36eb74af046a (diff) | |
download | php-git-6f572248907b8489b360ed2f030c10a2f5bb2e67.tar.gz |
upgrade regex library to alpha3.8
@- Upgraded regex library to alpha3.8 (Sascha)
Diffstat (limited to 'regex/regcomp.c')
-rw-r--r-- | regex/regcomp.c | 85 |
1 files changed, 71 insertions, 14 deletions
diff --git a/regex/regcomp.c b/regex/regcomp.c index b481be0f55..e3f0c1be4e 100644 --- a/regex/regcomp.c +++ b/regex/regcomp.c @@ -46,14 +46,14 @@ static char nuls[10]; /* place to point scanner in event of error */ #define MORE2() (p->next+1 < p->end) #define SEE(c) (MORE() && PEEK() == (c)) #define SEETWO(a, b) (MORE() && MORE2() && PEEK() == (a) && PEEK2() == (b)) -#define EAT(c) ((SEE(c)) ? (NEXT1(), 1) : 0) +#define EAT(c) ((SEE(c)) ? (NEXT(), 1) : 0) #define EATTWO(a, b) ((SEETWO(a, b)) ? (NEXT2(), 1) : 0) -#define NEXT1() (p->next++) +#define NEXT() (p->next++) #define NEXT2() (p->next += 2) #define NEXTn(n) (p->next += (n)) #define GETNEXT() (*p->next++) #define SETERROR(e) seterr(p, (e)) -#define REQUIRE(co, e) ((void)((co) || SETERROR(e))) +#define REQUIRE(co, e) ((co) || SETERROR(e)) #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)) @@ -326,7 +326,7 @@ register struct parse *p; if (!( c == '*' || c == '+' || c == '?' || (c == '{' && MORE2() && isdigit(PEEK2())) )) return; /* no repetition, we're done */ - NEXT1(); + NEXT(); REQUIRE(!wascaret, REG_BADRPT); switch (c) { @@ -363,7 +363,7 @@ register struct parse *p; repeat(p, pos, count, count2); if (!EAT('}')) { /* error heuristics */ while (MORE() && PEEK() != '}') - NEXT1(); + NEXT(); REQUIRE(MORE(), REG_EBRACE); SETERROR(REG_BADBR); } @@ -518,7 +518,7 @@ int starordinary; /* is a leading * an ordinary character? */ REQUIRE(starordinary, REG_BADRPT); /* FALLTHROUGH */ default: - ordinary(p, c &~ BACKSL); + ordinary(p, (char)c); /* takes off BACKSL, if any */ break; } @@ -541,7 +541,7 @@ int starordinary; /* is a leading * an ordinary character? */ repeat(p, pos, count, count2); if (!EATTWO('\\', '}')) { /* error heuristics */ while (MORE() && !SEETWO('\\', '}')) - NEXT1(); + NEXT(); REQUIRE(MORE(), REG_EBRACE); SETERROR(REG_BADBR); } @@ -699,7 +699,7 @@ register cset *cs; start = p_b_symbol(p); if (SEE('-') && MORE2() && PEEK2() != ']') { /* range */ - NEXT1(); + NEXT(); if (EAT('-')) finish = '-'; else @@ -730,7 +730,7 @@ register cset *cs; register char c; while (MORE() && isalpha(PEEK())) - NEXT1(); + NEXT(); len = p->next - sp; for (cp = cclasses; cp->name != NULL; cp++) if (strncmp(cp->name, sp, len) == 0 && cp->name[len] == '\0') @@ -799,7 +799,7 @@ int endc; /* name ended by endc,']' */ register int len; while (MORE() && !SEETWO(endc, ']')) - NEXT1(); + NEXT(); if (!MORE()) { SETERROR(REG_EBRACK); return(0); @@ -1056,7 +1056,7 @@ freeset(p, cs) register struct parse *p; register cset *cs; { - register unsigned int i; + register int i; register cset *top = &p->g->sets[p->g->ncsets]; register size_t css = (size_t)p->g->csetsize; @@ -1082,7 +1082,7 @@ register struct parse *p; register cset *cs; { register uch h = cs->hash; - register unsigned int i; + register int i; register cset *top = &p->g->sets[p->g->ncsets]; register cset *cs2; register size_t css = (size_t)p->g->csetsize; @@ -1115,7 +1115,7 @@ firstch(p, cs) register struct parse *p; register cset *cs; { - register unsigned int i; + register int i; register size_t css = (size_t)p->g->csetsize; for (i = 0; i < css; i++) @@ -1134,7 +1134,7 @@ nch(p, cs) register struct parse *p; register cset *cs; { - register unsigned int i; + register int i; register size_t css = (size_t)p->g->csetsize; register int n = 0; @@ -1171,6 +1171,63 @@ register char *cp; cs->multis[cs->smultis - 1] = '\0'; } +/* + - mcsub - subtract a collating element from a cset + == static void mcsub(register cset *cs, register char *cp); + */ +static void +mcsub(cs, cp) +register cset *cs; +register char *cp; +{ + register char *fp = mcfind(cs, cp); + register size_t len = strlen(fp); + + assert(fp != NULL); + (void) memmove(fp, fp + len + 1, + cs->smultis - (fp + len + 1 - cs->multis)); + cs->smultis -= len; + + if (cs->smultis == 0) { + free(cs->multis); + cs->multis = NULL; + return; + } + + cs->multis = realloc(cs->multis, cs->smultis); + assert(cs->multis != NULL); +} + +/* + - mcin - is a collating element in a cset? + == static int mcin(register cset *cs, register char *cp); + */ +static int +mcin(cs, cp) +register cset *cs; +register char *cp; +{ + return(mcfind(cs, cp) != NULL); +} + +/* + - mcfind - find a collating element in a cset + == static char *mcfind(register cset *cs, register char *cp); + */ +static char * +mcfind(cs, cp) +register cset *cs; +register char *cp; +{ + register char *p; + + if (cs->multis == NULL) + return(NULL); + for (p = cs->multis; *p != '\0'; p += strlen(p) + 1) + if (strcmp(cp, p) == 0) + return(p); + return(NULL); +} /* - mcinvert - invert the list of collating elements in a cset |