[master] 017ba98 Add an explicit macro_undef() function so we don't pass a NULL argument to a printflike function.

Poul-Henning Kamp phk at varnish-cache.org
Mon Apr 23 13:36:30 CEST 2012


commit 017ba98d6bc565756ade72736c2e6e9a8592f0d1
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Mon Apr 23 11:35:56 2012 +0000

    Add an explicit macro_undef() function so we don't pass a NULL
    argument to a printflike function.

diff --git a/bin/varnishtest/vtc.c b/bin/varnishtest/vtc.c
index b8556ce..99cf840 100644
--- a/bin/varnishtest/vtc.c
+++ b/bin/varnishtest/vtc.c
@@ -87,6 +87,8 @@ macro_def(struct vtclog *vl, const char *instance, const char *name,
 	struct macro *m;
 	va_list ap;
 
+	AN(fmt);
+
 	if (instance != NULL) {
 		bprintf(buf1, "%s_%s", instance, name);
 		name = buf1;
@@ -96,23 +98,40 @@ macro_def(struct vtclog *vl, const char *instance, const char *name,
 	VTAILQ_FOREACH(m, &macro_list, list)
 		if (!strcmp(name, m->name))
 			break;
-	if (m == NULL && fmt != NULL) {
+	if (m == NULL) {
 		m = calloc(sizeof *m, 1);
 		AN(m);
 		REPLACE(m->name, name);
 		VTAILQ_INSERT_TAIL(&macro_list, m, list);
 	}
-	if (fmt != NULL) {
-		AN(m);
-		va_start(ap, fmt);
-		free(m->val);
-		m->val = NULL;
-		vbprintf(buf2, fmt, ap);
-		va_end(ap);
-		m->val = strdup(buf2);
-		AN(m->val);
-		vtc_log(vl, 4, "macro def %s=%s", name, m->val);
-	} else if (m != NULL) {
+	AN(m);
+	va_start(ap, fmt);
+	free(m->val);
+	m->val = NULL;
+	vbprintf(buf2, fmt, ap);
+	va_end(ap);
+	m->val = strdup(buf2);
+	AN(m->val);
+	vtc_log(vl, 4, "macro def %s=%s", name, m->val);
+	AZ(pthread_mutex_unlock(&macro_mtx));
+}
+
+void
+macro_undef(struct vtclog *vl, const char *instance, const char *name)
+{
+	char buf1[256];
+	struct macro *m;
+
+	if (instance != NULL) {
+		bprintf(buf1, "%s_%s", instance, name);
+		name = buf1;
+	}
+
+	AZ(pthread_mutex_lock(&macro_mtx));
+	VTAILQ_FOREACH(m, &macro_list, list)
+		if (!strcmp(name, m->name))
+			break;
+	if (m != NULL) {
 		vtc_log(vl, 4, "macro undef %s", name);
 		VTAILQ_REMOVE(&macro_list, m, list);
 		free(m->name);
diff --git a/bin/varnishtest/vtc.h b/bin/varnishtest/vtc.h
index be20cb9..333a1df 100644
--- a/bin/varnishtest/vtc.h
+++ b/bin/varnishtest/vtc.h
@@ -87,6 +87,7 @@ void vtc_hexdump(struct vtclog *vl, int lvl, const char *pfx,
 int exec_file(const char *fn, const char *script, const char *tmpdir,
     char *logbuf, unsigned loglen);
 
+void macro_undef(struct vtclog *vl, const char *instance, const char *name);
 void macro_def(struct vtclog *vl, const char *instance, const char *name,
     const char *fmt, ...)
     __printflike(4, 5);
diff --git a/bin/varnishtest/vtc_server.c b/bin/varnishtest/vtc_server.c
index 75c4f30..eaa680f 100644
--- a/bin/varnishtest/vtc_server.c
+++ b/bin/varnishtest/vtc_server.c
@@ -143,9 +143,9 @@ server_delete(struct server *s)
 {
 
 	CHECK_OBJ_NOTNULL(s, SERVER_MAGIC);
-	macro_def(s->vl, s->name, "addr", NULL);
-	macro_def(s->vl, s->name, "port", NULL);
-	macro_def(s->vl, s->name, "sock", NULL);
+	macro_undef(s->vl, s->name, "addr");
+	macro_undef(s->vl, s->name, "port");
+	macro_undef(s->vl, s->name, "sock");
 	vtc_logclose(s->vl);
 	free(s->name);
 	/* XXX: MEMLEAK (?) (VSS ??) */
diff --git a/bin/varnishtest/vtc_varnish.c b/bin/varnishtest/vtc_varnish.c
index c00a143..e493ae7 100644
--- a/bin/varnishtest/vtc_varnish.c
+++ b/bin/varnishtest/vtc_varnish.c
@@ -522,9 +522,9 @@ varnish_stop(struct varnish *v)
 		varnish_launch(v);
 	if (vtc_error)
 		return;
-	macro_def(v->vl, v->name, "addr", NULL);
-	macro_def(v->vl, v->name, "port", NULL);
-	macro_def(v->vl, v->name, "sock", NULL);
+	macro_undef(v->vl, v->name, "addr");
+	macro_undef(v->vl, v->name, "port");
+	macro_undef(v->vl, v->name, "sock");
 	vtc_log(v->vl, 2, "Stop");
 	(void)varnish_ask_cli(v, "stop", NULL);
 	while (1) {



More information about the varnish-commit mailing list