r2883 - trunk/varnish-cache/lib/libvcl
phk at projects.linpro.no
phk at projects.linpro.no
Mon Jul 7 19:42:27 CEST 2008
Author: phk
Date: 2008-07-07 19:42:27 +0200 (Mon, 07 Jul 2008)
New Revision: 2883
Modified:
trunk/varnish-cache/lib/libvcl/flint.sh
trunk/varnish-cache/lib/libvcl/vcc_backend.c
Log:
Improve error messages in backend specifications
Modified: trunk/varnish-cache/lib/libvcl/flint.sh
===================================================================
--- trunk/varnish-cache/lib/libvcl/flint.sh 2008-07-07 17:21:57 UTC (rev 2882)
+++ trunk/varnish-cache/lib/libvcl/flint.sh 2008-07-07 17:42:27 UTC (rev 2883)
@@ -3,6 +3,7 @@
flexelint \
-I/usr/include \
-I. \
+ -I../.. \
-I../../include \
-I../../contrib/libevent \
flint.lnt \
Modified: trunk/varnish-cache/lib/libvcl/vcc_backend.c
===================================================================
--- trunk/varnish-cache/lib/libvcl/vcc_backend.c 2008-07-07 17:21:57 UTC (rev 2882)
+++ trunk/varnish-cache/lib/libvcl/vcc_backend.c 2008-07-07 17:42:27 UTC (rev 2883)
@@ -187,15 +187,13 @@
return (ok);
}
-
/*--------------------------------------------------------------------
- * Parse and emit a backend host specification.
+ * Parse and emit a backend host definition
*
* The syntax is the following:
*
- * backend_spec:
- * name_of_backend # by reference
- * '{' be_elements '}' # by specification
+ * backend_host_def:
+ * '{' be_elements '}'
*
* be_elements:
* be_element
@@ -208,38 +206,18 @@
*/
static void
-vcc_ParseBackendHost(struct tokenlist *tl, int *nbh, const struct token *name, const char *qual, int serial)
+vcc_ParseHostDef(struct tokenlist *tl, int *nbh, const struct token *name, const char *qual, int serial)
{
struct token *t_field;
struct token *t_first;
struct token *t_host = NULL;
struct token *t_port = NULL;
const char *ep;
- struct host *h;
struct fld_spec *fs;
fs = vcc_FldSpec(tl, "!host", "?port", "?connect_timeout", NULL);
t_first = tl->t;
- if (tl->t->tok == ID) {
- VTAILQ_FOREACH(h, &tl->hosts, list) {
- if (vcc_Teq(h->name, tl->t))
- break;
- }
- if (h == NULL) {
- vsb_printf(tl->sb, "Reference to unknown backend ");
- vcc_ErrToken(tl, tl->t);
- vsb_printf(tl->sb, " at\n");
- vcc_ErrWhere(tl, tl->t);
- return;
- }
- vcc_AddRef(tl, h->name, R_BACKEND);
- vcc_NextToken(tl);
- ExpectErr(tl, ';');
- vcc_NextToken(tl);
- *nbh = h->hnum;
- return;
- }
ExpectErr(tl, '{');
vcc_NextToken(tl);
@@ -333,6 +311,53 @@
}
/*--------------------------------------------------------------------
+ * Parse and emit a backend host specification.
+ *
+ * The syntax is the following:
+ *
+ * backend_spec:
+ * name_of_backend # by reference
+ * '{' be_elements '}' # by specification
+ *
+ * The struct vrt_backend is emitted to Fh().
+ */
+
+static void
+vcc_ParseBackendHost(struct tokenlist *tl, int *nbh, const struct token *name, const char *qual, int serial)
+{
+ struct host *h;
+
+ if (tl->t->tok == ID) {
+ VTAILQ_FOREACH(h, &tl->hosts, list) {
+ if (vcc_Teq(h->name, tl->t))
+ break;
+ }
+ if (h == NULL) {
+ vsb_printf(tl->sb, "Reference to unknown backend ");
+ vcc_ErrToken(tl, tl->t);
+ vsb_printf(tl->sb, " at\n");
+ vcc_ErrWhere(tl, tl->t);
+ return;
+ }
+ vcc_AddRef(tl, h->name, R_BACKEND);
+ vcc_NextToken(tl);
+ ExpectErr(tl, ';');
+ vcc_NextToken(tl);
+ *nbh = h->hnum;
+ } else if (tl->t->tok == '{') {
+ vcc_ParseHostDef(tl, nbh, name, qual, serial);
+ } else {
+ vsb_printf(tl->sb,
+ "Expected a backend specification here, either by name "
+ "or by {...}\n");
+ vcc_ErrToken(tl, tl->t);
+ vsb_printf(tl->sb, " at\n");
+ vcc_ErrWhere(tl, tl->t);
+ return;
+ }
+}
+
+/*--------------------------------------------------------------------
* Parse a plain backend
*/
@@ -383,7 +408,7 @@
static void
vcc_ParseRandomDirector(struct tokenlist *tl, struct token *t_dir)
{
- struct token *t_field;
+ struct token *t_field, *t_be;
int nbh, nelem;
struct fld_spec *fs;
unsigned u;
@@ -404,6 +429,7 @@
PF(t_dir));
for (nelem = 0; tl->t->tok != '}'; nelem++) { /* List of members */
+ t_be = tl->t;
vcc_ResetFldSpec(fs);
nbh = -1;
@@ -438,8 +464,12 @@
ErrInternal(tl);
}
}
- vcc_FieldsOk(tl, fs);
- ERRCHK(tl);
+ if (!vcc_FieldsOk(tl, fs)) {
+ vsb_printf(tl->sb,
+ "\nIn member host specfication starting at:\n");
+ vcc_ErrWhere(tl, t_be);
+ return;
+ }
Fc(tl, 0, " },\n");
vcc_NextToken(tl);
}
More information about the varnish-commit
mailing list