[master] 611baec6f STRING_LIST is no more.
Poul-Henning Kamp
phk at FreeBSD.org
Fri Aug 20 19:50:06 UTC 2021
commit 611baec6f29681bc1cc3836e635dfa14cca3d018
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Fri Aug 20 19:48:27 2021 +0000
STRING_LIST is no more.
diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index e65c76ea7..8b00b4fd4 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -748,15 +748,6 @@ VSLb_ts_busyobj(struct busyobj *bo, const char *event, vtim_real now)
/* cache_vcl.c */
const char *VCL_Name(const struct vcl *);
-/* cache_vrt.c */
-/*
- * These prototypes go here, because we do not want to pollute vrt.h
- * with va_list. VCC never generates direct calls to them.
- * XXX: We should deprecate these (ref: STRANDS)
- */
-const char *VRT_String(struct ws *ws, const char *h, const char *p, va_list ap);
-char *VRT_StringList(char *d, unsigned dl, const char *p, va_list ap);
-
/* cache_wrk.c */
typedef void *bgthread_t(struct worker *, void *priv);
diff --git a/bin/varnishd/cache/cache_vrt.c b/bin/varnishd/cache/cache_vrt.c
index 5894a95f9..fa62c8957 100644
--- a/bin/varnishd/cache/cache_vrt.c
+++ b/bin/varnishd/cache/cache_vrt.c
@@ -54,7 +54,6 @@
#include "common/vsmw.h"
#include "proxy/cache_proxy.h"
-const void * const vrt_magic_string_end = &vrt_magic_string_end;
const struct strands *vrt_null_strands = &(struct strands){
.n = 0,
.p = (const char *[1]){NULL}
@@ -395,126 +394,6 @@ VRT_HashStrands32(VCL_STRANDS s)
return (vle32dec(sha256 + VSHA256_LEN - 4));
}
-/*--------------------------------------------------------------------
- * Collapse a STRING_LIST in the space provided, or return NULL
- */
-
-char *
-VRT_StringList(char *d, unsigned dl, const char *p, va_list ap)
-{
- char *b, *e;
- unsigned x;
-
- b = d;
- e = b + dl;
- while (p != vrt_magic_string_end && b < e) {
- if (p != NULL && *p != '\0') {
- x = strlen(p);
- if (b + x < e)
- memcpy(b, p, x);
- b += x;
- }
- p = va_arg(ap, const char *);
- }
- if (b >= e)
- return (NULL);
- *b++ = '\0';
- return (b);
-}
-
-/*--------------------------------------------------------------------
- * Copy and merge a STRING_LIST into a workspace.
- */
-
-const char *
-VRT_String(struct ws *ws, const char *h, const char *p, va_list ap)
-{
- char *b, *e;
- const char *q;
- unsigned u, x;
- va_list aq;
-
- u = WS_ReserveAll(ws);
- e = b = WS_Reservation(ws);
- e += u;
-
- va_copy(aq, ap);
- do
- q = va_arg(aq, const char *);
- while (q == NULL || (q != vrt_magic_string_end && *q == '\0'));
-
- if (h != NULL && p == NULL && q == vrt_magic_string_end &&
- WS_Allocated(ws, h, -1)) {
- va_end(aq);
- WS_Release(ws, 0);
- return (h);
- }
-
- if (h == NULL && p != NULL && q == vrt_magic_string_end &&
- WS_Allocated(ws, p, -1)) {
- va_end(aq);
- WS_Release(ws, 0);
- return (p);
- }
-
- if (h == NULL && p == NULL) {
- if (q == vrt_magic_string_end) {
- va_end(aq);
- WS_Release(ws, 0);
- return ("");
- }
- do
- p = va_arg(aq, const char *);
- while (p == NULL || (p != vrt_magic_string_end && *p == '\0'));
- if (p == vrt_magic_string_end && WS_Allocated(ws, q, -1)) {
- va_end(aq);
- WS_Release(ws, 0);
- return (q);
- }
- p = NULL;
- va_end(aq);
- }
-
- if (h != NULL) {
- x = strlen(h);
- if (b + x < e)
- memcpy(b, h, x);
- b += x;
- if (b < e)
- *b = ' ';
- b++;
- }
- b = VRT_StringList(b, e > b ? e - b : 0, p, ap);
- if (b == NULL || b == e) {
- WS_MarkOverflow(ws);
- WS_Release(ws, 0);
- return (NULL);
- }
- e = b;
- b = WS_Reservation(ws);
- WS_Release(ws, e - b);
- return (b);
-}
-
-/*--------------------------------------------------------------------
- * Copy and merge a STRING_LIST on the current workspace
- */
-
-VCL_STRING
-VRT_CollectString(VRT_CTX, const char *p, ...)
-{
- va_list ap;
- const char *b;
-
- CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
- CHECK_OBJ_NOTNULL(ctx->ws, WS_MAGIC);
- va_start(ap, p);
- b = VRT_String(ctx->ws, NULL, p, ap);
- va_end(ap);
- if (b == NULL)
- VRT_fail(ctx, "Workspace overflow");
- return (b);
-}
/*--------------------------------------------------------------------
* Collapse STRANDS into the space provided, or return NULL
diff --git a/include/vrt.h b/include/vrt.h
index a9eb450c2..fd678e572 100644
--- a/include/vrt.h
+++ b/include/vrt.h
@@ -54,6 +54,8 @@
* binary/load-time compatible, increment MAJOR version
*
* NEXT (2021-09-15)
+ * VCL_STRINGLIST, vrt_magic_string_end removed
+ * VRT_String(), VRT_StringList(), VRT_CollectString() removed
* VRT_CollectStrands() renamed to VRT_STRANDS_string()
* VRT_l_{beresp|resp}_body() changed to takes STRANDS argument
* VRT_SetHdr() changed to take `const char*` & `STRANDS` arguments.
@@ -714,5 +716,4 @@ void VRT_VCL_Allow_Discard(struct vclref **);
*/
VCL_VOID VRT_synth_page(VRT_CTX, VCL_STRANDS);
-extern const void * const vrt_magic_string_end;
int VRT_Stv(const char *nm);
diff --git a/lib/libvcc/generate.py b/lib/libvcc/generate.py
index f5fd13a26..a2b318ba8 100755
--- a/lib/libvcc/generate.py
+++ b/lib/libvcc/generate.py
@@ -327,7 +327,6 @@ class vcltype(object):
vcltype("STRINGS", "void", True)
-vcltype("STRING_LIST", "void*", True)
vcltype("SUB", "void*", True)
fi = open(join(srcroot, "include/vrt.h"))
diff --git a/lib/libvcc/vcc_expr.c b/lib/libvcc/vcc_expr.c
index 28a3f4402..c2e25c871 100644
--- a/lib/libvcc/vcc_expr.c
+++ b/lib/libvcc/vcc_expr.c
@@ -48,7 +48,7 @@ struct expr {
uint8_t constant;
#define EXPR_VAR (1<<0)
#define EXPR_CONST (1<<1)
-#define EXPR_STR_CONST (1<<2) // Last STRING_LIST elem is "..."
+#define EXPR_STR_CONST (1<<2) // Last string elem is "..."
struct token *t1, *t2;
struct symbol *instance;
int nstr;
@@ -176,13 +176,18 @@ vcc_expr_edit(struct vcc *tl, vcc_type_t fmt, const char *p, struct expr *e1,
e3 = (*p == 'S' ? e1 : e2);
AN(e3);
assert(e1->fmt == STRINGS);
- if (e3->nstr > 1)
+ if (e3->nstr > 1) {
VSB_cat(e->vsb,
- "\nVRT_CollectString(ctx,\v+\n");
- VSB_cat(e->vsb, VSB_data(e3->vsb));
- if (e3->nstr > 1)
+ "\nVRT_STRANDS_string(ctx,\v+\n");
+ VSB_printf(e->vsb,
+ "&(struct strands){.n = %d, .p = "
+ "(const char *[%d]){\n%s\n}}",
+ e3->nstr, e3->nstr, VSB_data(e3->vsb));
VSB_cat(e->vsb,
- ",\nvrt_magic_string_end)\v-\n");
+ "\v-\n)\n");
+ } else {
+ VSB_cat(e->vsb, VSB_data(e3->vsb));
+ }
break;
case 'T':
case 't':
@@ -1396,9 +1401,7 @@ vcc_expr0(struct vcc *tl, struct expr **e, vcc_type_t fmt)
}
if ((*e)->fmt == STRINGS && fmt->stringform) {
- if (fmt == STRING_LIST)
- (*e)->fmt = STRING_LIST;
- else if (fmt == STRING)
+ if (fmt == STRING)
*e = vcc_expr_edit(tl, STRING, "\vS", *e, NULL);
else if (fmt == STRANDS)
*e = vcc_expr_edit(tl, STRANDS, "\vT", (*e), NULL);
@@ -1406,10 +1409,6 @@ vcc_expr0(struct vcc *tl, struct expr **e, vcc_type_t fmt)
WRONG("Unhandled stringform");
}
- if ((*e)->fmt == STRING_LIST)
- *e = vcc_expr_edit(tl, STRING_LIST,
- "\n\v1,\nvrt_magic_string_end", *e, NULL);
-
if (fmt == BOOL) {
vcc_expr_tobool(tl, e);
ERRCHK(tl);
diff --git a/lib/libvcc/vcc_types.c b/lib/libvcc/vcc_types.c
index 0a83f0976..829bb2c2e 100644
--- a/lib/libvcc/vcc_types.c
+++ b/lib/libvcc/vcc_types.c
@@ -202,12 +202,6 @@ const struct type STRINGS[1] = {{
.tostring = "",
}};
-const struct type STRING_LIST[1] = {{
- .magic = TYPE_MAGIC,
- .name = "STRING_LIST",
- .stringform = 1,
-}};
-
const struct type SUB[1] = {{
.magic = TYPE_MAGIC,
.name = "SUB",
More information about the varnish-commit
mailing list