Commit c341d11a authored by Geoff Simmons's avatar Geoff Simmons

consolidate code for the extract() method and function with the code for

sub() and suball()
parent a6c974d4
......@@ -433,19 +433,25 @@ vmod_regex_namedref(VRT_CTX, struct vmod_re2_regex *re, VCL_STRING name,
#undef ERR_PREFIX
static VCL_STRING
sub_method(VRT_CTX, const rewrite_e mode, struct vmod_re2_regex * restrict re,
VCL_STRING restrict text, VCL_STRING restrict rewrite,
VCL_STRING restrict fallback)
rewrite_method(VRT_CTX, const rewrite_e mode,
struct vmod_re2_regex * restrict re, VCL_STRING restrict text,
VCL_STRING restrict rewrite, VCL_STRING restrict fallback)
{
CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
CHECK_OBJ_NOTNULL(re, VMOD_RE2_REGEX_MAGIC);
if (fallback == NULL) {
VERR(ctx, "%s.%s(): fallback is undefined", re->vcl_name,
rewrite_name[mode]);
if (mode == SUBALL)
return "**SUBALL METHOD FAILED**";
else
switch(mode) {
case SUB:
return "**SUB METHOD FAILED**";
case SUBALL:
return "**SUBALL METHOD FAILED**";
case EXTRACT:
return "**EXTRACT METHOD FAILED**";
default:
WRONG("illegal mode");
}
}
if (text == NULL) {
VERR(ctx, "%s.%s(text=<undefined>, fallback=\"%.40s\"): "
......@@ -467,39 +473,21 @@ VCL_STRING
vmod_regex_sub(VRT_CTX, struct vmod_re2_regex *re, VCL_STRING text,
VCL_STRING rewrite, VCL_STRING fallback)
{
return sub_method(ctx, SUB, re, text, rewrite, fallback);
return rewrite_method(ctx, SUB, re, text, rewrite, fallback);
}
VCL_STRING
vmod_regex_suball(VRT_CTX, struct vmod_re2_regex *re, VCL_STRING text,
VCL_STRING rewrite, VCL_STRING fallback)
{
return sub_method(ctx, SUBALL, re, text, rewrite, fallback);
return rewrite_method(ctx, SUBALL, re, text, rewrite, fallback);
}
VCL_STRING
vmod_regex_extract(VRT_CTX, struct vmod_re2_regex *re, VCL_STRING text,
VCL_STRING rewrite, VCL_STRING fallback)
{
CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
CHECK_OBJ_NOTNULL(re, VMOD_RE2_REGEX_MAGIC);
if (fallback == NULL) {
VERR(ctx, "%s.extract(): fallback is undefined", re->vcl_name);
return "**EXTRACT METHOD FAILED**";
}
if (text == NULL) {
VERR(ctx, "%s.extract(text=<undefined>, fallback=\"%.40s\"): "
"text is undefined", re->vcl_name, fallback);
return fallback;
}
if (rewrite == NULL) {
VERR(ctx, "%s.extract(text=\"%.40s\", rewrite=<undefined>, "
"fallback=\"%.40s\"): rewrite is undefined", re->vcl_name,
text, fallback);
return fallback;
}
return rewritef(ctx, re->vre2, EXTRACT, text, rewrite, fallback);
return rewrite_method(ctx, EXTRACT, re, text, rewrite, fallback);
}
/* Object set */
......@@ -789,13 +777,14 @@ vmod_namedref(VRT_CTX, struct vmod_priv *priv, VCL_STRING name,
#define ERR_PREFIX "re2.%s(pattern=\"%.40s\", text=\"%.40s\", rewrite=\"%.40s\", fallback=\"%.40s\"): "
static VCL_STRING
sub_function(VRT_CTX, const rewrite_e mode, VCL_STRING restrict pattern,
VCL_STRING restrict text, VCL_STRING restrict rewrite,
VCL_STRING restrict fallback, VCL_BOOL utf8, VCL_BOOL posix_syntax,
VCL_BOOL longest_match, VCL_INT max_mem, VCL_BOOL literal,
VCL_BOOL never_nl, VCL_BOOL dot_nl, VCL_BOOL never_capture,
VCL_BOOL case_sensitive, VCL_BOOL perl_classes,
VCL_BOOL word_boundary, VCL_BOOL one_line)
rewrite_function(VRT_CTX, const rewrite_e mode, VCL_STRING restrict pattern,
VCL_STRING restrict text, VCL_STRING restrict rewrite,
VCL_STRING restrict fallback, VCL_BOOL utf8,
VCL_BOOL posix_syntax, VCL_BOOL longest_match, VCL_INT max_mem,
VCL_BOOL literal, VCL_BOOL never_nl, VCL_BOOL dot_nl,
VCL_BOOL never_capture, VCL_BOOL case_sensitive,
VCL_BOOL perl_classes, VCL_BOOL word_boundary,
VCL_BOOL one_line)
{
vre2 *vre2 = NULL;
const char *ret, *err;
......@@ -804,10 +793,16 @@ sub_function(VRT_CTX, const rewrite_e mode, VCL_STRING restrict pattern,
if (fallback == NULL) {
VERR(ctx, "re2.%s(): fallback is undefined",
rewrite_name[mode]);
if (mode == SUBALL)
return "**SUBALL FUNCTION FAILED**";
else
switch(mode) {
case SUB:
return "**SUB FUNCTION FAILED**";
case SUBALL:
return "**SUBALL FUNCTION FAILED**";
case EXTRACT:
return "**EXTRACT FUNCTION FAILED**";
default:
WRONG("illegal mode");
}
}
if (pattern == NULL) {
VERR(ctx, "re2.%s(pattern=<undefined>, fallback=\"%.40s\"): "
......@@ -854,10 +849,11 @@ vmod_sub(VRT_CTX, VCL_STRING pattern, VCL_STRING text, VCL_STRING rewrite,
VCL_BOOL case_sensitive, VCL_BOOL perl_classes, VCL_BOOL word_boundary,
VCL_BOOL one_line)
{
return sub_function(ctx, SUB, pattern, text, rewrite, fallback, utf8,
posix_syntax, longest_match, max_mem, literal,
never_nl, dot_nl, never_capture, case_sensitive,
perl_classes, word_boundary, one_line);
return rewrite_function(ctx, SUB, pattern, text, rewrite, fallback,
utf8, posix_syntax, longest_match, max_mem,
literal, never_nl, dot_nl, never_capture,
case_sensitive, perl_classes, word_boundary,
one_line);
}
VCL_STRING
......@@ -868,14 +864,13 @@ vmod_suball(VRT_CTX, VCL_STRING pattern, VCL_STRING text, VCL_STRING rewrite,
VCL_BOOL case_sensitive, VCL_BOOL perl_classes,
VCL_BOOL word_boundary, VCL_BOOL one_line)
{
return sub_function(ctx, SUBALL, pattern, text, rewrite, fallback, utf8,
posix_syntax, longest_match, max_mem, literal,
never_nl, dot_nl, never_capture, case_sensitive,
perl_classes, word_boundary, one_line);
return rewrite_function(ctx, SUBALL, pattern, text, rewrite, fallback,
utf8, posix_syntax, longest_match, max_mem,
literal, never_nl, dot_nl, never_capture,
case_sensitive, perl_classes, word_boundary,
one_line);
}
#define ERR_PREFIX "re2.extract(pattern=\"%.40s\", text=\"%.40s\", rewrite=\"%.40s\", fallback=\"%.40s\"): "
VCL_STRING
vmod_extract(VRT_CTX, VCL_STRING pattern, VCL_STRING text, VCL_STRING rewrite,
VCL_STRING fallback, VCL_BOOL utf8, VCL_BOOL posix_syntax,
......@@ -884,50 +879,13 @@ vmod_extract(VRT_CTX, VCL_STRING pattern, VCL_STRING text, VCL_STRING rewrite,
VCL_BOOL case_sensitive, VCL_BOOL perl_classes,
VCL_BOOL word_boundary, VCL_BOOL one_line)
{
vre2 *vre2 = NULL;
const char *ret, *err;
CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
if (fallback == NULL) {
ERR(ctx, "re2.extract(): fallback is undefined");
return "**EXTRACT FUNCTION FAILED**";
}
if (pattern == NULL) {
VERR(ctx,
"re2.extract(pattern=<undefined>, fallback=\"%.40s\"): "
"pattern is undefined", fallback);
return fallback;
}
if (text == NULL) {
VERR(ctx, "re2.extract(pattern=\"%.40s\", text=<undefined>, "
"fallback=\"%.40s\"): text is undefined", pattern,
fallback);
return fallback;
}
if (rewrite == NULL) {
VERR(ctx, "re2.extract(pattern=\"%.40s\", text=\"%.40s\", "
"rewrite=<undefined>, fallback=\"%.40s\"): "
"rewrite is undefined", pattern, text, fallback);
return fallback;
}
if ((err = vre2_init(&vre2, pattern, utf8, posix_syntax, longest_match,
max_mem, literal, never_nl, dot_nl, never_capture,
case_sensitive, perl_classes, word_boundary,
one_line))
!= NULL) {
VERR(ctx, ERR_PREFIX "Cannot compile '%.40s': %s", pattern,
text, rewrite, fallback, pattern, err);
vre2_fini(&vre2);
return fallback;
}
ret = rewritef(ctx, vre2, EXTRACT, text, rewrite, fallback);
vre2_fini(&vre2);
return ret;
return rewrite_function(ctx, EXTRACT, pattern, text, rewrite, fallback,
utf8, posix_syntax, longest_match, max_mem,
literal, never_nl, dot_nl, never_capture,
case_sensitive, perl_classes, word_boundary,
one_line);
}
#undef ERR_PREFIX
VCL_STRING
vmod_version(const struct vrt_ctx *ctx __attribute__((unused)))
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment