I'm not fond of using "substr" as the function name, as other languages use this function with start/end or start/length parameters to create a new string from the existing string.
I would suggest one of the following: - strstr - instr - contains Also, just out of curiosity, exactly how much faster is this than a regex match? On Sat, Sep 20, 2014 at 11:12 AM, Per Buer <[email protected]> wrote: > bin/varnishtest/tests/m00018.vtc | 34 ++++++++++++++++++++++++++++++++++ > lib/libvmod_std/vmod.vcc | 12 +++++++++++- > lib/libvmod_std/vmod_std.c | 14 ++++++++++++++ > 3 files changed, 59 insertions(+), 1 deletion(-) > create mode 100644 bin/varnishtest/tests/m00018.vtc > > diff --git a/bin/varnishtest/tests/m00018.vtc > b/bin/varnishtest/tests/m00018.vtc > new file mode 100644 > index 0000000..af00716 > --- /dev/null > +++ b/bin/varnishtest/tests/m00018.vtc > @@ -0,0 +1,34 @@ > +varnishtest "Test substring matching in std" > + > +server s1 { > + rxreq > + txresp > + > + rxreq > + txresp > +} -start > + > +varnish v1 -vcl+backend { > + import ${vmod_std}; > + > + sub vcl_deliver { > + if (std.substr(req.url, "foo")) { > + set resp.http.sub = "found"; > + } else { > + set resp.http.sub = "not found"; > + } > + > + } > +} -start > + > +client c1 { > + txreq -url "/foobar" > + rxresp > + expect resp.http.sub == "found" > + > + > + txreq -url "/quux" > + rxresp > + expect resp.http.sub == "not found" > +} -run > + > diff --git a/lib/libvmod_std/vmod.vcc b/lib/libvmod_std/vmod.vcc > index fbc082b..e59c7a4 100644 > --- a/lib/libvmod_std/vmod.vcc > +++ b/lib/libvmod_std/vmod.vcc > @@ -195,7 +195,6 @@ $Function STRING querysort(STRING) > > Description > Sorts the querystring for cache normalization purposes. > - > Example > set req.url = std.querysort(req.url); > > @@ -208,6 +207,17 @@ Example > > This will cache the req.body if its size is smaller than 1KB. > > +$Function BOOL substr(STRING, STRING) > + > +Description > + Returns true if the second string is a substring of the first > + string. Note that the comparison is case sensitive. You can > + use the tolower function on both strings if you want case > + insensitivity. > +Example > + if (std.substr(req.url, req.http.x-restrict)) > + > + > > SEE ALSO > ======== > diff --git a/lib/libvmod_std/vmod_std.c b/lib/libvmod_std/vmod_std.c > index 8872a1c..8a89bb8 100644 > --- a/lib/libvmod_std/vmod_std.c > +++ b/lib/libvmod_std/vmod_std.c > @@ -239,3 +239,17 @@ vmod_cache_req_body(const struct vrt_ctx *ctx, > VCL_BYTES size) > result = VRT_CacheReqBody(ctx, size); > VSLb(ctx->vsl, SLT_Debug,"VRT_CacheReqBody(%zu): %d", (size_t)size, > result); > } > + > +VCL_BOOL __match_proto__(td_std_substr) > +vmod_substr(const struct vrt_ctx *ctx, VCL_STRING mstr, VCL_STRING > msubstr) > +{ > + > + CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC); > + char *match = strstr(mstr, msubstr); > + > + if (match) > + return(1); > + else > + return(0); > +} > + > -- > 1.9.3 (Apple Git-50)+GitX > > -- > *Per Buer* > CTO | Varnish Software AS > Cell: +47 95839117 > We Make Websites Fly! > www.varnish-software.com > [image: Register now] > <http://info.varnish-software.com/varnish-summits-autumn-2014-registration> > > _______________________________________________ > varnish-dev mailing list > [email protected] > https://www.varnish-cache.org/lists/mailman/listinfo/varnish-dev >
_______________________________________________ varnish-dev mailing list [email protected] https://www.varnish-cache.org/lists/mailman/listinfo/varnish-dev
