[master] e41fd1c Refactor a VCC error message

Poul-Henning Kamp phk at FreeBSD.org
Fri May 20 11:01:07 CEST 2016


commit e41fd1cbce06129062900dc8e362ed2212c9a295
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Fri May 20 09:00:07 2016 +0000

    Refactor a VCC error message

diff --git a/bin/varnishtest/tests/a00000.vtc b/bin/varnishtest/tests/a00000.vtc
index d3fe2fd..eb42f48 100644
--- a/bin/varnishtest/tests/a00000.vtc
+++ b/bin/varnishtest/tests/a00000.vtc
@@ -1,5 +1,6 @@
 # the first token in a varnishtest file must be "varnishtest",
- 	# but whitespace and comments are fine
+    # but whitespace (SP)
+	# and (TAB) and comments are fine
 
 varnishtest "basic default HTTP transactions"
 
diff --git a/bin/varnishtest/tests/d00006.vtc b/bin/varnishtest/tests/d00006.vtc
index e98d66a..195e8ba 100644
--- a/bin/varnishtest/tests/d00006.vtc
+++ b/bin/varnishtest/tests/d00006.vtc
@@ -22,7 +22,7 @@ server s4 {
 	txresp -body "4444"
 } -start
 
-varnish v1 -errvcl {Names of VCL objects cannot contain '-'} {
+varnish v1 -errvcl {Name of VCL object, 'rr1-xx', contains illegal character '-'} {
 	import directors;
 	backend b1 { .host = "127.0.0.1"; .port = "8080";}
 	sub vcl_init {
diff --git a/bin/varnishtest/tests/v00020.vtc b/bin/varnishtest/tests/v00020.vtc
index a05b7fb..d8e4622 100644
--- a/bin/varnishtest/tests/v00020.vtc
+++ b/bin/varnishtest/tests/v00020.vtc
@@ -257,7 +257,7 @@ varnish v1 -vcl {
 	}
 }
 
-varnish v1 -errvcl {Names of VCL sub's cannot contain '-'} {
+varnish v1 -errvcl {Name of function, 'foo-bar', contains illegal character '-'} {
 	backend b { .host = "127.0.0.1"; }
 	sub foo-bar {
 	}
@@ -291,7 +291,7 @@ varnish v1 -errvcl {'beresp.status': Not available in method 'vcl_recv'.} {
 	}
 }
 
-varnish v1 -errvcl {Names of VCL acl's cannot contain '-'} {
+varnish v1 -errvcl {Name of ACL, 'foo-bar', contains illegal character '-'} {
 	backend b { .host = "127.0.0.1"; }
 	acl foo-bar {
 	}
diff --git a/bin/varnishtest/tests/v00047.vtc b/bin/varnishtest/tests/v00047.vtc
index 9ca2a6c..4f03588 100644
--- a/bin/varnishtest/tests/v00047.vtc
+++ b/bin/varnishtest/tests/v00047.vtc
@@ -1,10 +1,10 @@
 varnishtest "Changing Last Modified in vcl_deliver"
- 
+
 server s1 {
 	rxreq
 	txresp -hdr "Last-Modified: Wed, 27 Apr 2016 14:00:00 GMT"
 } -start
- 
+
 varnish v1 -vcl+backend {
 	sub vcl_deliver {
 		if (req.http.deliver == "modify") {
@@ -12,7 +12,7 @@ varnish v1 -vcl+backend {
 		}
 	}
 } -start
- 
+
 client c1 {
 	txreq
 	rxresp
diff --git a/lib/libvcc/vcc_acl.c b/lib/libvcc/vcc_acl.c
index c6f57fb..18d967d 100644
--- a/lib/libvcc/vcc_acl.c
+++ b/lib/libvcc/vcc_acl.c
@@ -479,13 +479,8 @@ vcc_ParseAcl(struct vcc *tl)
 	vcc_NextToken(tl);
 	VTAILQ_INIT(&tl->acl);
 
-	ExpectErr(tl, ID);
-	if (!vcc_isCid(tl->t)) {
-		VSB_printf(tl->sb,
-		    "Names of VCL acl's cannot contain '-'\n");
-		vcc_ErrWhere(tl, tl->t);
-		return;
-	}
+	vcc_ExpectCid(tl, "ACL");
+	ERRCHK(tl);
 	an = tl->t;
 	vcc_NextToken(tl);
 
diff --git a/lib/libvcc/vcc_action.c b/lib/libvcc/vcc_action.c
index 425b993..2e1a2fb 100644
--- a/lib/libvcc/vcc_action.c
+++ b/lib/libvcc/vcc_action.c
@@ -156,12 +156,8 @@ parse_new(struct vcc *tl)
 
 	vcc_NextToken(tl);
 	ExpectErr(tl, ID);
-	if (!vcc_isCid(tl->t)) {
-		VSB_printf(tl->sb,
-		    "Names of VCL objects cannot contain '-'\n");
-		vcc_ErrWhere(tl, tl->t);
-		return;
-	}
+	vcc_ExpectCid(tl, "VCL object");
+	ERRCHK(tl);
 	sy1 = VCC_FindSymbol(tl, tl->t, SYM_NONE);
 	if (sy1 != NULL) {
 		VSB_printf(tl->sb, "Object name '%.*s' already used.\n",
diff --git a/lib/libvcc/vcc_backend.c b/lib/libvcc/vcc_backend.c
index 6e9c498..abf454d 100644
--- a/lib/libvcc/vcc_backend.c
+++ b/lib/libvcc/vcc_backend.c
@@ -251,9 +251,9 @@ vcc_ParseProbe(struct vcc *tl)
 	struct token *t_probe;
 	char *p;
 
-	vcc_NextToken(tl);		/* ID: probe */
+	vcc_NextToken(tl);			/* ID: probe */
 
-	vcc_ExpectCid(tl);		/* ID: name */
+	vcc_ExpectCid(tl, "backend probe");	/* ID: name */
 	ERRCHK(tl);
 	t_probe = tl->t;
 	vcc_NextToken(tl);
@@ -462,7 +462,7 @@ vcc_ParseBackend(struct vcc *tl)
 	t_first = tl->t;
 	vcc_NextToken(tl);		/* ID: backend */
 
-	vcc_ExpectCid(tl);		/* ID: name */
+	vcc_ExpectCid(tl, "backend");	/* ID: name */
 	ERRCHK(tl);
 
 	if (tl->t->e - tl->t->b > MAX_BACKEND_NAME) {
diff --git a/lib/libvcc/vcc_compile.h b/lib/libvcc/vcc_compile.h
index da00d26..e9e72cc 100644
--- a/lib/libvcc/vcc_compile.h
+++ b/lib/libvcc/vcc_compile.h
@@ -54,7 +54,6 @@ struct sockaddr_storage;
 #define isident1(c) (isalpha(c))
 #define isident(c) (isalpha(c) || isdigit(c) || (c) == '_' || (c) == '-')
 #define isvar(c) (isident(c) || (c) == '.')
-int vcc_isCid(const struct token *t);
 unsigned vcl_fixed_token(const char *p, const char **q);
 extern const char * const vcl_tnames[256];
 void vcl_output_lang_h(struct vsb *sb);
@@ -333,7 +332,7 @@ void vcc_ErrWhere2(struct vcc *, const struct token *, const struct token *);
 
 void vcc__Expect(struct vcc *tl, unsigned tok, unsigned line);
 int vcc_IdIs(const struct token *t, const char *p);
-void vcc_ExpectCid(struct vcc *tl);
+void vcc_ExpectCid(struct vcc *tl, const char *what);
 void vcc_Lexer(struct vcc *tl, struct source *sp);
 void vcc_NextToken(struct vcc *tl);
 void vcc__ErrInternal(struct vcc *tl, const char *func,
diff --git a/lib/libvcc/vcc_expr.c b/lib/libvcc/vcc_expr.c
index 1d0108c..7ad85ee 100644
--- a/lib/libvcc/vcc_expr.c
+++ b/lib/libvcc/vcc_expr.c
@@ -509,7 +509,7 @@ vcc_Eval_Handle(struct vcc *tl, struct expr **e, const struct symbol *sym,
 		*e = vcc_mk_expr(STRING, "\"%s\"", sym->name);
 		vcc_AddRef(tl, tl->t, sym->kind);
 	} else {
-		vcc_ExpectCid(tl);
+		vcc_ExpectCid(tl, "handle");
 		vcc_AddRef(tl, tl->t, sym->kind);
 		*e = vcc_mk_expr(sym->fmt, "%s", sym->rname);
 		(*e)->constant = EXPR_VAR;	/* XXX ? */
@@ -1196,7 +1196,7 @@ vcc_expr_cmp(struct vcc *tl, struct expr **e, enum var_type fmt)
 	    (tl->t->tok == '~' || tl->t->tok == T_NOMATCH)) {
 		not = tl->t->tok == '~' ? "" : "!";
 		vcc_NextToken(tl);
-		vcc_ExpectCid(tl);
+		vcc_ExpectCid(tl, "ACL");
 		vcc_AddRef(tl, tl->t, SYM_ACL);
 		bprintf(buf, "%smatch_acl_named_%.*s(ctx, \v1)",
 		    not, PF(tl->t));
diff --git a/lib/libvcc/vcc_parse.c b/lib/libvcc/vcc_parse.c
index 811c90f..e6df4c8 100644
--- a/lib/libvcc/vcc_parse.c
+++ b/lib/libvcc/vcc_parse.c
@@ -211,13 +211,8 @@ vcc_ParseFunction(struct vcc *tl)
 	int m, i;
 
 	vcc_NextToken(tl);
-	ExpectErr(tl, ID);
-	if (!vcc_isCid(tl->t)) {
-		VSB_printf(tl->sb,
-		    "Names of VCL sub's cannot contain '-'\n");
-		vcc_ErrWhere(tl, tl->t);
-		return;
-	}
+	vcc_ExpectCid(tl, "function");
+	ERRCHK(tl);
 
 	m = IsMethod(tl->t);
 	if (m == -2) {
diff --git a/lib/libvcc/vcc_token.c b/lib/libvcc/vcc_token.c
index a8513f8..c4771bd 100644
--- a/lib/libvcc/vcc_token.c
+++ b/lib/libvcc/vcc_token.c
@@ -293,32 +293,23 @@ vcc_IdIs(const struct token *t, const char *p)
  * Check that we have a C-identifier
  */
 
-int
-vcc_isCid(const struct token *t)
-{
-	const char *q;
-
-	assert(t->tok == ID);
-	for (q = t->b; q < t->e; q++) {
-		if (!isalnum(*q) && *q != '_')
-			return (0);
-	}
-	return (1);
-}
-
 void
-vcc_ExpectCid(struct vcc *tl)
+vcc_ExpectCid(struct vcc *tl, const char *what)
 {
+	const char *q;
 
 	ExpectErr(tl, ID);
 	ERRCHK(tl);
-	if (vcc_isCid(tl->t))
-		return;
-	VSB_printf(tl->sb, "Identifier ");
-	vcc_ErrToken(tl, tl->t);
-	VSB_printf(tl->sb,
-	    " contains illegal characters, use [0-9a-zA-Z_] only.\n");
-	vcc_ErrWhere(tl, tl->t);
+	for (q = tl->t->b; q < tl->t->e; q++) {
+		if (!isalnum(*q) && *q != '_') {
+			VSB_printf(tl->sb, "Name of %s, ", what);
+			vcc_ErrToken(tl, tl->t);
+			VSB_printf(tl->sb,
+			    ", contains illegal character '%c'\n", *q);
+			vcc_ErrWhere(tl, tl->t);
+			return;
+		}
+	}
 }
 
 /*--------------------------------------------------------------------



More information about the varnish-commit mailing list