[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, ¯o_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(¯o_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(¯o_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(¯o_mtx));
+ VTAILQ_FOREACH(m, ¯o_list, list)
+ if (!strcmp(name, m->name))
+ break;
+ if (m != NULL) {
vtc_log(vl, 4, "macro undef %s", name);
VTAILQ_REMOVE(¯o_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