#else /* no PCRE */
regex_t regex;
#endif
- char *regstr; /* this contain the original string */
};
/* what to do when a header matches a regex */
#else
regfree(&preg->regex);
#endif
- free(preg->regstr);
- preg->regstr = NULL;
}
#endif /* _COMMON_REGEX_H */
return 0;
}
- pattern->ptr.reg = (struct my_regex *)trash->str;
- pattern->ptr.reg->regstr = (char *)text;
+ pattern->ptr.str = (char *)text;
return 1;
}
}
/* compile regex */
- if (!regex_comp(pat->ptr.reg->regstr, patl->pat.ptr.reg, !(patl->pat.flags & PAT_F_IGNORE_CASE), 0, err)) {
+ if (!regex_comp(pat->ptr.str, patl->pat.ptr.reg, !(patl->pat.flags & PAT_F_IGNORE_CASE), 0, err)) {
free(patl);
free(patl->pat.ptr.reg);
return 0;
int regex_comp(const char *str, struct my_regex *regex, int cs, int cap, char **err)
{
- /* copy the original regex format */
- regex->regstr = strdup(str);
- if (!regex->regstr) {
- memprintf(err, "out of memory");
- return 0;
- }
-
#ifdef USE_PCRE_JIT
int flags = 0;
const char *error;
regex->reg = pcre_compile(str, flags, &error, &erroffset, NULL);
if (!regex->reg) {
- free(regex->regstr);
memprintf(err, "regex '%s' is invalid (error=%s, erroffset=%d)", str, error, erroffset);
return 0;
}
regex->extra = pcre_study(regex->reg, PCRE_STUDY_JIT_COMPILE, &error);
if (!regex->extra) {
- free(regex->regstr);
pcre_free(regex->reg);
memprintf(err, "failed to compile regex '%s' (error=%s)", str, error);
return 0;
flags |= REG_NOSUB;
if (regcomp(®ex->regex, str, flags) != 0) {
- free(regex->regstr);
memprintf(err, "regex '%s' is invalid", str);
return 0;
}