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, ...@@ -433,19 +433,25 @@ vmod_regex_namedref(VRT_CTX, struct vmod_re2_regex *re, VCL_STRING name,
#undef ERR_PREFIX #undef ERR_PREFIX
static VCL_STRING static VCL_STRING
sub_method(VRT_CTX, const rewrite_e mode, struct vmod_re2_regex * restrict re, rewrite_method(VRT_CTX, const rewrite_e mode,
VCL_STRING restrict text, VCL_STRING restrict rewrite, struct vmod_re2_regex * restrict re, VCL_STRING restrict text,
VCL_STRING restrict fallback) VCL_STRING restrict rewrite, VCL_STRING restrict fallback)
{ {
CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC); CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
CHECK_OBJ_NOTNULL(re, VMOD_RE2_REGEX_MAGIC); CHECK_OBJ_NOTNULL(re, VMOD_RE2_REGEX_MAGIC);
if (fallback == NULL) { if (fallback == NULL) {
VERR(ctx, "%s.%s(): fallback is undefined", re->vcl_name, VERR(ctx, "%s.%s(): fallback is undefined", re->vcl_name,
rewrite_name[mode]); rewrite_name[mode]);
if (mode == SUBALL) switch(mode) {
return "**SUBALL METHOD FAILED**"; case SUB:
else
return "**SUB METHOD FAILED**"; return "**SUB METHOD FAILED**";
case SUBALL:
return "**SUBALL METHOD FAILED**";
case EXTRACT:
return "**EXTRACT METHOD FAILED**";
default:
WRONG("illegal mode");
}
} }
if (text == NULL) { if (text == NULL) {
VERR(ctx, "%s.%s(text=<undefined>, fallback=\"%.40s\"): " VERR(ctx, "%s.%s(text=<undefined>, fallback=\"%.40s\"): "
...@@ -467,39 +473,21 @@ VCL_STRING ...@@ -467,39 +473,21 @@ VCL_STRING
vmod_regex_sub(VRT_CTX, struct vmod_re2_regex *re, VCL_STRING text, vmod_regex_sub(VRT_CTX, struct vmod_re2_regex *re, VCL_STRING text,
VCL_STRING rewrite, VCL_STRING fallback) 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 VCL_STRING
vmod_regex_suball(VRT_CTX, struct vmod_re2_regex *re, VCL_STRING text, vmod_regex_suball(VRT_CTX, struct vmod_re2_regex *re, VCL_STRING text,
VCL_STRING rewrite, VCL_STRING fallback) 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 VCL_STRING
vmod_regex_extract(VRT_CTX, struct vmod_re2_regex *re, VCL_STRING text, vmod_regex_extract(VRT_CTX, struct vmod_re2_regex *re, VCL_STRING text,
VCL_STRING rewrite, VCL_STRING fallback) VCL_STRING rewrite, VCL_STRING fallback)
{ {
CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC); return rewrite_method(ctx, EXTRACT, re, text, rewrite, fallback);
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);
} }
/* Object set */ /* Object set */
...@@ -789,13 +777,14 @@ vmod_namedref(VRT_CTX, struct vmod_priv *priv, VCL_STRING name, ...@@ -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\"): " #define ERR_PREFIX "re2.%s(pattern=\"%.40s\", text=\"%.40s\", rewrite=\"%.40s\", fallback=\"%.40s\"): "
static VCL_STRING static VCL_STRING
sub_function(VRT_CTX, const rewrite_e mode, VCL_STRING restrict pattern, rewrite_function(VRT_CTX, const rewrite_e mode, VCL_STRING restrict pattern,
VCL_STRING restrict text, VCL_STRING restrict rewrite, VCL_STRING restrict text, VCL_STRING restrict rewrite,
VCL_STRING restrict fallback, VCL_BOOL utf8, VCL_BOOL posix_syntax, VCL_STRING restrict fallback, VCL_BOOL utf8,
VCL_BOOL longest_match, VCL_INT max_mem, VCL_BOOL literal, VCL_BOOL posix_syntax, VCL_BOOL longest_match, VCL_INT max_mem,
VCL_BOOL never_nl, VCL_BOOL dot_nl, VCL_BOOL never_capture, VCL_BOOL literal, VCL_BOOL never_nl, VCL_BOOL dot_nl,
VCL_BOOL case_sensitive, VCL_BOOL perl_classes, VCL_BOOL never_capture, VCL_BOOL case_sensitive,
VCL_BOOL word_boundary, VCL_BOOL one_line) VCL_BOOL perl_classes, VCL_BOOL word_boundary,
VCL_BOOL one_line)
{ {
vre2 *vre2 = NULL; vre2 *vre2 = NULL;
const char *ret, *err; const char *ret, *err;
...@@ -804,10 +793,16 @@ sub_function(VRT_CTX, const rewrite_e mode, VCL_STRING restrict pattern, ...@@ -804,10 +793,16 @@ sub_function(VRT_CTX, const rewrite_e mode, VCL_STRING restrict pattern,
if (fallback == NULL) { if (fallback == NULL) {
VERR(ctx, "re2.%s(): fallback is undefined", VERR(ctx, "re2.%s(): fallback is undefined",
rewrite_name[mode]); rewrite_name[mode]);
if (mode == SUBALL) switch(mode) {
return "**SUBALL FUNCTION FAILED**"; case SUB:
else
return "**SUB FUNCTION FAILED**"; return "**SUB FUNCTION FAILED**";
case SUBALL:
return "**SUBALL FUNCTION FAILED**";
case EXTRACT:
return "**EXTRACT FUNCTION FAILED**";
default:
WRONG("illegal mode");
}
} }
if (pattern == NULL) { if (pattern == NULL) {
VERR(ctx, "re2.%s(pattern=<undefined>, fallback=\"%.40s\"): " 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, ...@@ -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 case_sensitive, VCL_BOOL perl_classes, VCL_BOOL word_boundary,
VCL_BOOL one_line) VCL_BOOL one_line)
{ {
return sub_function(ctx, SUB, pattern, text, rewrite, fallback, utf8, return rewrite_function(ctx, SUB, pattern, text, rewrite, fallback,
posix_syntax, longest_match, max_mem, literal, utf8, posix_syntax, longest_match, max_mem,
never_nl, dot_nl, never_capture, case_sensitive, literal, never_nl, dot_nl, never_capture,
perl_classes, word_boundary, one_line); case_sensitive, perl_classes, word_boundary,
one_line);
} }
VCL_STRING VCL_STRING
...@@ -868,14 +864,13 @@ vmod_suball(VRT_CTX, VCL_STRING pattern, VCL_STRING text, VCL_STRING rewrite, ...@@ -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 case_sensitive, VCL_BOOL perl_classes,
VCL_BOOL word_boundary, VCL_BOOL one_line) VCL_BOOL word_boundary, VCL_BOOL one_line)
{ {
return sub_function(ctx, SUBALL, pattern, text, rewrite, fallback, utf8, return rewrite_function(ctx, SUBALL, pattern, text, rewrite, fallback,
posix_syntax, longest_match, max_mem, literal, utf8, posix_syntax, longest_match, max_mem,
never_nl, dot_nl, never_capture, case_sensitive, literal, never_nl, dot_nl, never_capture,
perl_classes, word_boundary, one_line); case_sensitive, perl_classes, word_boundary,
one_line);
} }
#define ERR_PREFIX "re2.extract(pattern=\"%.40s\", text=\"%.40s\", rewrite=\"%.40s\", fallback=\"%.40s\"): "
VCL_STRING VCL_STRING
vmod_extract(VRT_CTX, VCL_STRING pattern, VCL_STRING text, VCL_STRING rewrite, vmod_extract(VRT_CTX, VCL_STRING pattern, VCL_STRING text, VCL_STRING rewrite,
VCL_STRING fallback, VCL_BOOL utf8, VCL_BOOL posix_syntax, 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, ...@@ -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 case_sensitive, VCL_BOOL perl_classes,
VCL_BOOL word_boundary, VCL_BOOL one_line) VCL_BOOL word_boundary, VCL_BOOL one_line)
{ {
vre2 *vre2 = NULL; return rewrite_function(ctx, EXTRACT, pattern, text, rewrite, fallback,
const char *ret, *err; utf8, posix_syntax, longest_match, max_mem,
literal, never_nl, dot_nl, never_capture,
CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC); case_sensitive, perl_classes, word_boundary,
if (fallback == NULL) { one_line);
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;
} }
#undef ERR_PREFIX
VCL_STRING VCL_STRING
vmod_version(const struct vrt_ctx *ctx __attribute__((unused))) 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