[master] 7968d1d2a vsc: Add new 'I' and 'X' arguments
Dridi Boukelmoune
dridi.boukelmoune at gmail.com
Mon Aug 31 16:00:08 UTC 2020
commit 7968d1d2a3e4f556dfcafc8b78228e66646394a3
Author: Dridi Boukelmoune <dridi.boukelmoune at gmail.com>
Date: Tue Aug 25 18:01:21 2020 +0200
vsc: Add new 'I' and 'X' arguments
And simplify the 'f' argument handling.
diff --git a/include/vapi/vsc.h b/include/vapi/vsc.h
index b2ba993e9..b4dda6c3c 100644
--- a/include/vapi/vsc.h
+++ b/include/vapi/vsc.h
@@ -114,7 +114,9 @@ void VSC_Destroy(struct vsc **, struct vsm *);
int VSC_Arg(struct vsc *, char arg, const char *opt);
/*
* Handle standard stat-presenter arguments
- * 'f' - filter
+ * 'I' - field inclusion glob
+ * 'X' - field exclusion glob
+ * 'f' - legacy field filter glob
*
* Return:
* -1 error, VSM_Error() returns diagnostic string
diff --git a/lib/libvarnishapi/vsc.c b/lib/libvarnishapi/vsc.c
index d0ee9afb2..70ad3d507 100644
--- a/lib/libvarnishapi/vsc.c
+++ b/lib/libvarnishapi/vsc.c
@@ -138,27 +138,34 @@ VSC_New(void)
/*--------------------------------------------------------------------*/
static int
-vsc_f_arg(struct vsc *vsc, const char *opt)
+vsc_sf_arg(struct vsc *vsc, const char *glob, const struct vsc_sf_mode *mode)
{
struct vsc_sf *sf;
- AN(opt);
+ CHECK_OBJ_NOTNULL(vsc, VSC_MAGIC);
+ AN(glob);
+ AN(mode);
ALLOC_OBJ(sf, VSC_SF_MAGIC);
AN(sf);
-
- if (opt[0] == '^') {
- sf->mode = VSC_SF_EXCLUDE;
- opt++;
- } else {
- sf->mode = VSC_SF_INCLUDE;
- }
-
- REPLACE(sf->pattern, opt);
+ REPLACE(sf->pattern, glob);
+ sf->mode = mode;
VTAILQ_INSERT_TAIL(&vsc->sf_list, sf, list);
return (1);
}
+static int
+vsc_f_arg(struct vsc *vsc, const char *opt)
+{
+
+ CHECK_OBJ_NOTNULL(vsc, VSC_MAGIC);
+ AN(opt);
+
+ if (opt[0] == '^')
+ return (vsc_sf_arg(vsc, opt + 1, VSC_SF_EXCLUDE));
+ return (vsc_sf_arg(vsc, opt, VSC_SF_INCLUDE));
+}
+
/*--------------------------------------------------------------------*/
int
@@ -168,6 +175,8 @@ VSC_Arg(struct vsc *vsc, char arg, const char *opt)
CHECK_OBJ_NOTNULL(vsc, VSC_MAGIC);
switch (arg) {
+ case 'I': return (vsc_sf_arg(vsc, opt, VSC_SF_INCLUDE));
+ case 'X': return (vsc_sf_arg(vsc, opt, VSC_SF_EXCLUDE));
case 'f': return (vsc_f_arg(vsc, opt));
default: return (0);
}
More information about the varnish-commit
mailing list