[master] ee25c1b fix argstruct for PRIV_*
Nils Goroll
nils.goroll at uplex.de
Fri Mar 9 16:18:07 UTC 2018
commit ee25c1b559f505817cd754204bc6ed43040f2789
Author: Nils Goroll <nils.goroll at uplex.de>
Date: Fri Mar 9 17:06:16 2018 +0100
fix argstruct for PRIV_*
PRIV_* arguments are unnamed, so vmodtool names their argstruct members
arg%d
diff --git a/lib/libvcc/vcc_expr.c b/lib/libvcc/vcc_expr.c
index 90cc00c..f67b141 100644
--- a/lib/libvcc/vcc_expr.c
+++ b/lib/libvcc/vcc_expr.c
@@ -468,6 +468,7 @@ vcc_func(struct vcc *tl, struct expr **e, const void *priv,
const char *sa;
char ssa[64];
char ssa2[64];
+ int n;
CAST_OBJ_NOTNULL(vv, priv, VJSN_VAL_MAGIC);
assert(vv->type == VJSN_ARRAY);
@@ -574,7 +575,9 @@ vcc_func(struct vcc *tl, struct expr **e, const void *priv,
e1 = vcc_mk_expr(rfmt, "%s(ctx%s,\v+(\n", cfunc, extra);
else
e1 = vcc_mk_expr(rfmt, "%s(ctx%s\v+", cfunc, extra);
+ n = 0;
VTAILQ_FOREACH_SAFE(fa, &head, list, fa2) {
+ n++;
if (fa->optional)
VSB_printf(tl->curproc->prologue,
" %s.valid_%s = %d;\n", sa, fa->name, fa->avail);
@@ -583,7 +586,12 @@ vcc_func(struct vcc *tl, struct expr **e, const void *priv,
if (fa->result == NULL && fa->val != NULL)
fa->result = vcc_mk_expr(fa->type, "%s", fa->val);
if (fa->result != NULL && sa != NULL) {
- bprintf(ssa2, "\v1%s.%s = \v2,\n", sa, fa->name);
+ if (fa->name && *fa->name != '\0')
+ bprintf(ssa2, "\v1%s.%s = \v2,\n",
+ sa, fa->name);
+ else
+ bprintf(ssa2, "\v1%s.arg%d = \v2,\n",
+ sa, n);
e1 = vcc_expr_edit(tl, e1->fmt, ssa2, e1, fa->result);
} else if (fa->result != NULL) {
e1 = vcc_expr_edit(tl, e1->fmt, "\v1,\n\v2",
More information about the varnish-commit
mailing list