[master] 66b32cb prefix the vmod-obj struct with the vmod name, they are in global namespace for vmod.

Poul-Henning Kamp phk at varnish-cache.org
Mon Feb 11 09:07:03 CET 2013


commit 66b32cbe0b4bd569865265440ade1a3d11913588
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Mon Feb 11 08:06:42 2013 +0000

    prefix the vmod-obj struct with the vmod name, they are in global
    namespace for vmod.

diff --git a/lib/libvcl/vmodtool.py b/lib/libvcl/vmodtool.py
index d1dfb68..3b71226 100755
--- a/lib/libvcl/vmodtool.py
+++ b/lib/libvcl/vmodtool.py
@@ -120,8 +120,9 @@ class vmod(object):
 	def add_func(self, fn):
 		self.funcs.append(fn)
 
-	def add_obj(self, fn):
-		self.objs.append(fn)
+	def add_obj(self, obj):
+		self.objs.append(obj)
+		obj.set_modnam(self.nam)
 
 	def c_proto(self, fo):
 		for o in self.objs:
@@ -307,22 +308,28 @@ class obj(object):
 		self.init_fini = None
 		self.methods = list()
 
+	def set_modnam(self, modnam):
+		self.st = "struct vmod_" + modnam + "_" + self.nam
+		self.init_fini.set_pfx(", " + self.st + " **")
+		for m in self.methods:
+			m.set_pfx(", " + self.st + " *")
+
 	def set_init_fini(self, f):
 		self.init_fini = f
 
 	def add_method(self, m):
 		self.methods.append(m)
 
-	def c_typedefs(self, modname):
+	def c_typedefs(self, modnam):
 		l = list()
 		l.append("/* Object " + self.nam + " */")
-		l.append(self.init_fini.c_typedef(modname) + "")
+		l.append(self.init_fini.c_typedef(modnam) + "")
 		for m in self.methods:
-			l.append(m.c_typedef(modname) + "")
+			l.append(m.c_typedef(modnam) + "")
 		return l
 
 	def c_proto(self, fo):
-		fo.write("struct vmod_" + self.nam + ";\n")
+		fo.write(self.st + ";\n")
 		self.init_fini.c_proto(fo)
 		for m in o.methods:
 			m.c_proto(fo)
@@ -343,7 +350,9 @@ class obj(object):
 
 	def c_strspec(self, modnam):
 		s = "\t/* Object " + self.nam + " */\n"
-		s += '\t"OBJ\\0' + self.init_fini.c_strspec(modnam) + '",\n'
+		s += '\t"OBJ\\0'
+		s += self.st + '\\0'
+		s += self.init_fini.c_strspec(modnam) + '",\n'
 		for m in self.methods:
 			s += '\t"METHOD\\0' + m.c_strspec(modnam) + '",\n'
 		return s
@@ -456,7 +465,6 @@ def parse_func(tl, rt_type = None, obj=None):
 def parse_obj(tl):
 	o = obj(tl[0].str)
 	f = parse_func(tl, "VOID")
-	f.set_pfx(", struct vmod_" + o.nam + " **")
 	o.set_init_fini(f)
 	t = tl.pop(0)
 	assert t.str == "{"
@@ -466,7 +474,6 @@ def parse_obj(tl):
 			break
 		assert t.str == "Method"
 		f = parse_func(tl, obj=o.nam)
-		f.set_pfx(", struct vmod_" + o.nam + " *")
 		o.add_method(f)
 	return o
 
diff --git a/lib/libvmod_debug/vmod_debug_obj.c b/lib/libvmod_debug/vmod_debug_obj.c
index 656de88..5ae2f3b 100644
--- a/lib/libvmod_debug/vmod_debug_obj.c
+++ b/lib/libvmod_debug/vmod_debug_obj.c
@@ -35,23 +35,23 @@
 #include "vrt.h"
 #include "vcc_if.h"
 
-struct vmod_obj {
+struct vmod_debug_obj {
 	unsigned		magic;
-#define VMOD_OBJ_MAGIC		0xccbd9b77
+#define VMOD_DEBUG_OBJ_MAGIC	0xccbd9b77
 	int foobar;
 };
 
 VCL_VOID
-vmod_obj(struct req *req, struct vmod_obj **op, VCL_STRING s)
+vmod_obj(struct req *req, struct vmod_debug_obj **op, VCL_STRING s)
 {
-	struct vmod_obj *o;
+	struct vmod_debug_obj *o;
 
 	(void)req;
 	(void)s;
 	AN(op);
 	if (*op == NULL) {
 		/* INIT */
-		ALLOC_OBJ(o, VMOD_OBJ_MAGIC);
+		ALLOC_OBJ(o, VMOD_DEBUG_OBJ_MAGIC);
 		*op = o;
 		o->foobar = 42;
 		AN(*op);
@@ -63,20 +63,20 @@ vmod_obj(struct req *req, struct vmod_obj **op, VCL_STRING s)
 }
 
 VCL_STRING
-vmod_obj__foo(struct req *req, struct vmod_obj *o, VCL_STRING s)
+vmod_obj__foo(struct req *req, struct vmod_debug_obj *o, VCL_STRING s)
 {
 	(void)req;
 	(void)s;
-	CHECK_OBJ_NOTNULL(o, VMOD_OBJ_MAGIC);
+	CHECK_OBJ_NOTNULL(o, VMOD_DEBUG_OBJ_MAGIC);
 	assert(o->foobar == 42);
 	return ("BOO");
 }
 
 VCL_TIME
-vmod_obj__date(struct req *req, struct vmod_obj *o)
+vmod_obj__date(struct req *req, struct vmod_debug_obj *o)
 {
 	(void)req;
-	CHECK_OBJ_NOTNULL(o, VMOD_OBJ_MAGIC);
+	CHECK_OBJ_NOTNULL(o, VMOD_DEBUG_OBJ_MAGIC);
 	assert(o->foobar == 42);
 	return (21.4);
 }



More information about the varnish-commit mailing list