This is in preparation for being able to use it for storing multiple
values
---
 lib/libvmod_debug/vmod_debug.c | 50 ++++++++++++++++++++++++++++++++----------
 1 file changed, 39 insertions(+), 11 deletions(-)

diff --git a/lib/libvmod_debug/vmod_debug.c b/lib/libvmod_debug/vmod_debug.c
index b6736fb..72bbbe4 100644
--- a/lib/libvmod_debug/vmod_debug.c
+++ b/lib/libvmod_debug/vmod_debug.c
@@ -36,6 +36,12 @@
 #include "vrt.h"
 #include "vcc_if.h"
 
+struct priv_vcl {
+       unsigned                magic;
+#define PRIV_VCL_MAGIC         0x8E62FA9D
+       char                    *foo;
+};
+
 VCL_VOID __match_proto__(td_debug_panic)
 vmod_panic(VRT_CTX, const char *str, ...)
 {
@@ -65,16 +71,6 @@ vmod_author(VRT_CTX, VCL_ENUM id)
        WRONG("Illegal VMOD enum");
 }
 
-int
-init_function(struct vmod_priv *priv, const struct VCL_conf *cfg)
-{
-       (void)cfg;
-
-       priv->priv = strdup("FOO");
-       priv->free = free;
-       return (0);
-}
-
 VCL_VOID __match_proto__(td_debug_test_priv_call)
 vmod_test_priv_call(VRT_CTX, struct vmod_priv *priv)
 {
@@ -103,9 +99,13 @@ vmod_test_priv_task(VRT_CTX, struct vmod_priv *priv, 
VCL_STRING s)
 VCL_VOID __match_proto__(td_debug_test_priv_vcl)
 vmod_test_priv_vcl(VRT_CTX, struct vmod_priv *priv)
 {
+       struct priv_vcl *priv_vcl;
 
        CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
-       assert(!strcmp(priv->priv, "FOO"));
+       AN(priv);
+       CAST_OBJ_NOTNULL(priv_vcl, priv->priv, PRIV_VCL_MAGIC);
+       AN(priv_vcl->foo);
+       assert(!strcmp(priv_vcl->foo, "FOO"));
 }
 
 VCL_BLOB
@@ -175,3 +175,31 @@ vmod_vre_limit(VRT_CTX)
        (void)ctx;
        return (cache_param->vre_limits.match);
 }
+
+static void __match_proto__(vmod_priv_free_f)
+priv_vcl_free(void *priv)
+{
+       struct priv_vcl *priv_vcl;
+
+       CAST_OBJ_NOTNULL(priv_vcl, priv, PRIV_VCL_MAGIC);
+       AN(priv_vcl->foo);
+       free(priv_vcl->foo);
+       FREE_OBJ(priv_vcl);
+       AZ(priv_vcl);
+}
+
+int __match_proto__(vmod_init_f)
+init_function(struct vmod_priv *priv, const struct VCL_conf *cfg)
+{
+       struct priv_vcl *priv_vcl;
+
+       (void)cfg;
+
+       ALLOC_OBJ(priv_vcl, PRIV_VCL_MAGIC);
+       AN(priv_vcl);
+       priv_vcl->foo = strdup("FOO");
+       AN(priv_vcl->foo);
+       priv->priv = priv_vcl;
+       priv->free = priv_vcl_free;
+       return (0);
+}
-- 
2.1.4


_______________________________________________
varnish-dev mailing list
[email protected]
https://www.varnish-cache.org/lists/mailman/listinfo/varnish-dev

Reply via email to