[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