[master] 4c36d7c Replace EncString() with VSB_quote()
Poul-Henning Kamp
phk at FreeBSD.org
Thu May 19 12:14:06 CEST 2016
commit 4c36d7ca34444ffe304c2fb9f6cf5b27505213d1
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Thu May 19 10:13:08 2016 +0000
Replace EncString() with VSB_quote()
diff --git a/include/vsb.h b/include/vsb.h
index 4c2c9b7..35e752b 100644
--- a/include/vsb.h
+++ b/include/vsb.h
@@ -79,6 +79,7 @@ void VSB_destroy(struct vsb **);
#define VSB_QUOTE_NONL 1
#define VSB_QUOTE_JSON 2
#define VSB_QUOTE_HEX 4
+#define VSB_QUOTE_CSTR 8
void VSB_quote(struct vsb *, const void *, int len, int how);
void VSB_indent(struct vsb *, int);
#ifdef __cplusplus
diff --git a/lib/libvarnish/vsb.c b/lib/libvarnish/vsb.c
index 7a15f56..6a6f169 100644
--- a/lib/libvarnish/vsb.c
+++ b/lib/libvarnish/vsb.c
@@ -533,13 +533,18 @@ VSB_quote(struct vsb *s, const void *v, int len, int how)
break;
}
}
- if (!quote && !(how & VSB_QUOTE_JSON)) {
+ if (!quote && !(how & (VSB_QUOTE_JSON|VSB_QUOTE_CSTR))) {
(void)VSB_bcat(s, p, len);
return;
}
(void)VSB_putc(s, '"');
for (q = p; q < p + len; q++) {
switch (*q) {
+ case '?':
+ if (how & VSB_QUOTE_CSTR)
+ (void)VSB_putc(s, '\\');
+ (void)VSB_putc(s, *q);
+ break;
case ' ':
(void)VSB_putc(s, *q);
break;
@@ -549,7 +554,9 @@ VSB_quote(struct vsb *s, const void *v, int len, int how)
(void)VSB_putc(s, *q);
break;
case '\n':
- if (how & VSB_QUOTE_NONL)
+ if (how & VSB_QUOTE_CSTR)
+ (void)VSB_cat(s, "\"\n\t\"");
+ else if (how & VSB_QUOTE_NONL)
(void)VSB_cat(s, "\n");
else
(void)VSB_cat(s, "\\n");
diff --git a/lib/libvcc/vcc_compile.c b/lib/libvcc/vcc_compile.c
index bc22cad..4a182cf 100644
--- a/lib/libvcc/vcc_compile.c
+++ b/lib/libvcc/vcc_compile.c
@@ -203,45 +203,11 @@ Fc(const struct vcc *tl, int indent, const char *fmt, ...)
/*--------------------------------------------------------------------*/
void
-EncString(struct vsb *sb, const char *b, const char *e, int mode)
-{
-
- if (e == NULL)
- e = strchr(b, '\0');
-
- VSB_cat(sb, "\"");
- for (; b < e; b++) {
- switch (*b) {
- case '?': // Trigraphs
- case '\\':
- case '"':
- VSB_printf(sb, "\\%c", *b);
- break;
- case '\n':
- VSB_printf(sb, "\\n");
- if (mode)
- VSB_printf(sb, "\"\n\t\"");
- break;
- case '\t': VSB_printf(sb, "\\t"); break;
- case '\r': VSB_printf(sb, "\\r"); break;
- case ' ': VSB_printf(sb, " "); break;
- default:
- if (isgraph(*b))
- VSB_printf(sb, "%c", *b);
- else
- VSB_printf(sb, "\\%03o", (uint8_t)*b);
- break;
- }
- }
- VSB_cat(sb, "\"");
-}
-
-void
EncToken(struct vsb *sb, const struct token *t)
{
assert(t->tok == CSTR);
- EncString(sb, t->dec, NULL, 1);
+ VSB_quote(sb, t->dec, -1, VSB_QUOTE_CSTR);
}
/*--------------------------------------------------------------------
@@ -264,7 +230,7 @@ EmitCoordinates(const struct vcc *tl, struct vsb *vsb)
VSB_printf(vsb, "\nstatic const char *srcname[VGC_NSRCS] = {\n");
VTAILQ_FOREACH(sp, &tl->sources, list) {
VSB_printf(vsb, "\t");
- EncString(vsb, sp->name, NULL, 0);
+ VSB_quote(vsb, sp->name, -1, VSB_QUOTE_CSTR);
VSB_printf(vsb, ",\n");
}
VSB_printf(vsb, "};\n");
@@ -272,10 +238,10 @@ EmitCoordinates(const struct vcc *tl, struct vsb *vsb)
VSB_printf(vsb, "\nstatic const char *srcbody[%u] = {\n", tl->nsources);
VTAILQ_FOREACH(sp, &tl->sources, list) {
VSB_printf(vsb, " /* ");
- EncString(vsb, sp->name, NULL, 0);
+ VSB_quote(vsb, sp->name, -1, VSB_QUOTE_CSTR);
VSB_printf(vsb, "*/\n");
VSB_printf(vsb, "\t");
- EncString(vsb, sp->b, sp->e, 1);
+ VSB_quote(vsb, sp->b, sp->e - sp->b, VSB_QUOTE_CSTR);
VSB_printf(vsb, ",\n");
}
VSB_printf(vsb, "};\n\n");
diff --git a/lib/libvcc/vcc_compile.h b/lib/libvcc/vcc_compile.h
index c9c1396..da00d26 100644
--- a/lib/libvcc/vcc_compile.h
+++ b/lib/libvcc/vcc_compile.h
@@ -278,8 +278,6 @@ void *TlAlloc(struct vcc *tl, unsigned len);
char *TlDup(struct vcc *tl, const char *s);
char *TlDupTok(struct vcc *tl, const struct token *tok);
-void EncString(struct vsb *sb, const char *b, const char *e, int mode);
-
/* vcc_expr.c */
double vcc_DoubleVal(struct vcc *tl);
void vcc_Duration(struct vcc *tl, double *);
diff --git a/lib/libvcc/vcc_vmod.c b/lib/libvcc/vcc_vmod.c
index aca8890..5d36bd3 100644
--- a/lib/libvcc/vcc_vmod.c
+++ b/lib/libvcc/vcc_vmod.c
@@ -200,7 +200,7 @@ vcc_ParseImport(struct vcc *tl)
VSB_printf(ifp->ini, "\t sizeof(Vmod_%.*s_Func),\n", PF(mod));
VSB_printf(ifp->ini, "\t \"%.*s\",\n", PF(mod));
VSB_printf(ifp->ini, "\t ");
- EncString(ifp->ini, fnp, NULL, 0);
+ VSB_quote(ifp->ini, fnp, -1, VSB_QUOTE_CSTR);
VSB_printf(ifp->ini, ",\n");
AN(vmd);
AN(vmd->file_id);
More information about the varnish-commit
mailing list