diff --git a/src/backend/regex/regc_locale.c b/src/backend/regex/regc_locale.c index 0f70931b13edfef77b6a4908e3b038aa5542153d..6cf27958b1545a61fba01e76dc4d37aca32789dc 100644 --- a/src/backend/regex/regc_locale.c +++ b/src/backend/regex/regc_locale.c @@ -499,7 +499,7 @@ cclass(struct vars * v, /* context */ { size_t len; struct cvec *cv = NULL; - const char **namePtr; + const char * const *namePtr; int i, index; @@ -507,7 +507,7 @@ cclass(struct vars * v, /* context */ * The following arrays define the valid character class names. */ - static const char *classNames[] = { + static const char * const classNames[] = { "alnum", "alpha", "ascii", "blank", "cntrl", "digit", "graph", "lower", "print", "punct", "space", "upper", "xdigit", NULL }; diff --git a/src/backend/regex/rege_dfa.c b/src/backend/regex/rege_dfa.c index e521261a57192fd08e1482f8ccdd99eda3e4ff70..f4fd41458bd4677196412e6e8d58d982fe97a125 100644 --- a/src/backend/regex/rege_dfa.c +++ b/src/backend/regex/rege_dfa.c @@ -272,36 +272,35 @@ static struct dfa * newdfa(struct vars * v, struct cnfa * cnfa, struct colormap * cm, - struct smalldfa * small) /* preallocated space, may be NULL */ + struct smalldfa * sml) /* preallocated space, may be NULL */ { struct dfa *d; size_t nss = cnfa->nstates * 2; int wordsper = (cnfa->nstates + UBITS - 1) / UBITS; - struct smalldfa *smallwas = small; + struct smalldfa *smallwas = sml; assert(cnfa != NULL && cnfa->nstates != 0); if (nss <= FEWSTATES && cnfa->ncolors <= FEWCOLORS) { assert(wordsper == 1); - if (small == NULL) + if (sml == NULL) { - small = (struct smalldfa *) MALLOC( - sizeof(struct smalldfa)); - if (small == NULL) + sml = (struct smalldfa *) MALLOC(sizeof(struct smalldfa)); + if (sml == NULL) { ERR(REG_ESPACE); return NULL; } } - d = &small->dfa; - d->ssets = small->ssets; - d->statesarea = small->statesarea; + d = &sml->dfa; + d->ssets = sml->ssets; + d->statesarea = sml->statesarea; d->work = &d->statesarea[nss]; - d->outsarea = small->outsarea; - d->incarea = small->incarea; + d->outsarea = sml->outsarea; + d->incarea = sml->incarea; d->cptsmalloced = 0; - d->mallocarea = (smallwas == NULL) ? (char *) small : NULL; + d->mallocarea = (smallwas == NULL) ? (char *) sml : NULL; } else { diff --git a/src/backend/regex/regexec.c b/src/backend/regex/regexec.c index 7dc0ddba29ef2f785050ee3fc3677708fcdcb16a..f8e31f8f4ade89d9a4bec2ab8287b4689c1d082b 100644 --- a/src/backend/regex/regexec.c +++ b/src/backend/regex/regexec.c @@ -141,7 +141,6 @@ static int dissect(struct vars *, struct subre *, chr *, chr *); static int condissect(struct vars *, struct subre *, chr *, chr *); static int altdissect(struct vars *, struct subre *, chr *, chr *); static int cdissect(struct vars *, struct subre *, chr *, chr *); -static int ccaptdissect(struct vars *, struct subre *, chr *, chr *); static int ccondissect(struct vars *, struct subre *, chr *, chr *); static int crevdissect(struct vars *, struct subre *, chr *, chr *); static int cbrdissect(struct vars *, struct subre *, chr *, chr *); @@ -708,6 +707,8 @@ cdissect(struct vars * v, chr *begin, /* beginning of relevant substring */ chr *end) /* end of same */ { + int er; + assert(t != NULL); MDEBUG(("cdissect %ld-%ld %c\n", LOFF(begin), LOFF(end), t->op)); @@ -727,31 +728,16 @@ cdissect(struct vars * v, return ccondissect(v, t, begin, end); case '(': /* capturing */ assert(t->left != NULL && t->right == NULL); - return ccaptdissect(v, t, begin, end); + assert(t->subno > 0); + er = cdissect(v, t->left, begin, end); + if (er == REG_OKAY) + subset(v, t, begin, end); + return er; default: return REG_ASSERT; } } -/* - * ccaptdissect - capture subexpression matches (with complications) - */ -static int /* regexec return code */ -ccaptdissect(struct vars * v, - struct subre * t, - chr *begin, /* beginning of relevant substring */ - chr *end) /* end of same */ -{ - int er; - - assert(t->subno > 0); - - er = cdissect(v, t->left, begin, end); - if (er == REG_OKAY) - subset(v, t, begin, end); - return er; -} - /* * ccondissect - concatenation subexpression matches (with complications) * The retry memory stores the offset of the trial midpoint from begin,