[master] 6f16ca3 Simplify the macro code, no need for two different kinds of macros.

Poul-Henning Kamp phk at FreeBSD.org
Tue Feb 2 08:52:11 CET 2016


commit 6f16ca39f37e697b79b3ae587c6b167f9c4f60fe
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Tue Feb 2 07:49:00 2016 +0000

    Simplify the macro code, no need for two different kinds of macros.

diff --git a/bin/varnishtest/vtc.c b/bin/varnishtest/vtc.c
index 0ba0c0e..b60deb4 100644
--- a/bin/varnishtest/vtc.c
+++ b/bin/varnishtest/vtc.c
@@ -71,6 +71,51 @@ struct macro {
 
 static VTAILQ_HEAD(,macro) macro_list = VTAILQ_HEAD_INITIALIZER(macro_list);
 
+/**********************************************************************/
+
+static struct macro *
+macro_def_int(const char *name, const char *fmt, va_list ap)
+{
+	struct macro *m;
+	char buf[256];
+
+	VTAILQ_FOREACH(m, &macro_list, list)
+		if (!strcmp(name, m->name))
+			break;
+	if (m == NULL) {
+		ALLOC_OBJ(m, MACRO_MAGIC);
+		AN(m);
+		REPLACE(m->name, name);
+		AN(m->name);
+		VTAILQ_INSERT_TAIL(&macro_list, m, list);
+	}
+	AN(m);
+	vbprintf(buf, fmt, ap);
+	REPLACE(m->val, buf);
+	AN(m->val);
+	return (m);
+}
+
+
+/**********************************************************************
+ * This is for defining macros before we fork the child process which
+ * runs the test-case.
+ */
+
+void
+extmacro_def(const char *name, const char *fmt, ...)
+{
+	va_list ap;
+
+	va_start(ap, fmt);
+	(void)macro_def_int(name, fmt, ap);
+	va_end(ap);
+}
+
+/**********************************************************************
+ * Below this point is run inside the testing child-process.
+ */
+
 static pthread_mutex_t		macro_mtx;
 
 static void
@@ -84,7 +129,6 @@ macro_def(struct vtclog *vl, const char *instance, const char *name,
     const char *fmt, ...)
 {
 	char buf1[256];
-	char buf2[256];
 	struct macro *m;
 	va_list ap;
 
@@ -96,21 +140,9 @@ macro_def(struct vtclog *vl, const char *instance, const char *name,
 	}
 
 	AZ(pthread_mutex_lock(&macro_mtx));
-	VTAILQ_FOREACH(m, &macro_list, list)
-		if (!strcmp(name, m->name))
-			break;
-	if (m == NULL) {
-		ALLOC_OBJ(m, MACRO_MAGIC);
-		AN(m);
-		REPLACE(m->name, name);
-		VTAILQ_INSERT_TAIL(&macro_list, m, list);
-	}
-	AN(m);
 	va_start(ap, fmt);
-	vbprintf(buf2, fmt, ap);
+	m = macro_def_int(name, fmt, ap);
 	va_end(ap);
-	REPLACE(m->val, buf2);
-	AN(m->val);
 	vtc_log(vl, 4, "macro def %s=%s", name, m->val);
 	AZ(pthread_mutex_unlock(&macro_mtx));
 }
@@ -147,7 +179,6 @@ macro_get(const char *b, const char *e)
 	int l;
 	char *retval = NULL;
 
-
 	l = e - b;
 
 	if (l == 4 && !memcmp(b, "date", l)) {
@@ -163,7 +194,7 @@ macro_get(const char *b, const char *e)
 		CHECK_OBJ_NOTNULL(m, MACRO_MAGIC);
 		if (!strncmp(b, m->name, l) && m->name[l] == '\0')
 			break;
-}
+	}
 	if (m != NULL)
 		retval = strdup(m->val);
 	AZ(pthread_mutex_unlock(&macro_mtx));
@@ -200,7 +231,7 @@ macro_expand(struct vtclog *vl, const char *text)
 			VSB_delete(vsb);
 			vtc_log(vl, 0, "Macro ${%.*s} not found", (int)(q - p),
 			    p);
-			return (NULL);
+			NEEDLESS_RETURN (NULL);
 		}
 		VSB_printf(vsb, "%s", m);
 		free(m);
@@ -210,56 +241,6 @@ macro_expand(struct vtclog *vl, const char *text)
 	return (vsb);
 }
 
-/*
- * extmacro is a list of macro's that are defined from the
- * command line and are applied to the macro list of each test
- * instance. No locking is required as they are set before any tests
- *  are started.
- */
-
-struct extmacro {
-	unsigned		magic;
-#define EXTMACRO_MAGIC		0x51019ded
-	VTAILQ_ENTRY(extmacro)	list;
-	char			*name;
-	char			*val;
-};
-
-static VTAILQ_HEAD(, extmacro) extmacro_list =
-	VTAILQ_HEAD_INITIALIZER(extmacro_list);
-
-void
-extmacro_def(const char *name, const char *fmt, ...)
-{
-	char buf[256];
-	struct extmacro *m;
-	va_list ap;
-
-	VTAILQ_FOREACH(m, &extmacro_list, list)
-		if (!strcmp(name, m->name))
-			break;
-	if (m == NULL && fmt != NULL) {
-		ALLOC_OBJ(m, EXTMACRO_MAGIC);
-		AN(m);
-		REPLACE(m->name, name);
-		AN(m->name);
-		VTAILQ_INSERT_TAIL(&extmacro_list, m, list);
-	}
-	if (fmt != NULL) {
-		AN(m);
-		va_start(ap, fmt);
-		vbprintf(buf, fmt, ap);
-		va_end(ap);
-		REPLACE(m->val, buf);
-		AN(m->val);
-	} else if (m != NULL) {
-		VTAILQ_REMOVE(&extmacro_list, m, list);
-		REPLACE(m->name, NULL);
-		REPLACE(m->val, NULL);
-		FREE_OBJ(m);
-	}
-}
-
 /**********************************************************************
  * Parse a string
  *
@@ -385,7 +366,7 @@ parse_string(const char *spec, const struct cmds *cmd, void *priv,
 				break;
 		if (cp->name == NULL) {
 			vtc_log(vl, 0, "Unknown command: \"%s\"", token_s[0]);
-			return;
+			NEEDLESS_RETURN;
 		}
 
 		assert(cp->cmd != NULL);
@@ -645,7 +626,6 @@ exec_file(const char *fn, const char *script, const char *tmpdir,
 {
 	unsigned old_err;
 	FILE *f;
-	struct extmacro *m;
 
 	(void)signal(SIGPIPE, SIG_IGN);
 
@@ -657,12 +637,6 @@ exec_file(const char *fn, const char *script, const char *tmpdir,
 	init_sema();
 	init_server();
 
-	/* Apply extmacro definitions */
-	VTAILQ_FOREACH(m, &extmacro_list, list) {
-		CHECK_OBJ_NOTNULL(m, EXTMACRO_MAGIC);
-		macro_def(vltop, NULL, m->name, "%s", m->val);
-	}
-
 	/*
 	 * We need an IP number which will not repond, ever, and that is a
 	 * lot harder than it sounds.  This IP# is from RFC5737 and a



More information about the varnish-commit mailing list