From: phk Date: Sun, 18 Jan 2009 14:50:20 +0000 (+0000) Subject: Move the body of cli_quote() to vsb_quote() and give it a, presently X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=804a432ab556a6244edcb40d3f964b68211592cb;p=varnish Move the body of cli_quote() to vsb_quote() and give it a, presently unused, "how" argument flag. We currently have far too many "quote this string properly" implementations in varnish, hopefully, this will replace most of them. Once this stabilizes, vsb_quote() will be contributed back to FreeBSD. git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@3515 d4fa192b-c00b-0410-8231-f00ffab90ce4 --- diff --git a/varnish-cache/include/vsb.h b/varnish-cache/include/vsb.h index 4bc22db0..d107f020 100644 --- a/varnish-cache/include/vsb.h +++ b/varnish-cache/include/vsb.h @@ -77,6 +77,7 @@ char *vsb_data(struct vsb *); int vsb_len(struct vsb *); int vsb_done(const struct vsb *); void vsb_delete(struct vsb *); +void vsb_quote(struct vsb *s, const char *p, int how); #ifdef __cplusplus }; #endif diff --git a/varnish-cache/lib/libvarnish/cli_common.c b/varnish-cache/lib/libvarnish/cli_common.c index e390d651..8b68418d 100644 --- a/varnish-cache/lib/libvarnish/cli_common.c +++ b/varnish-cache/lib/libvarnish/cli_common.c @@ -72,48 +72,8 @@ cli_out(struct cli *cli, const char *fmt, ...) void cli_quote(struct cli *cli, const char *s) { - const char *q; - int quote = 0; - for (q = s; *q != '\0'; q++) { - if (!isgraph(*q) || *q == '"') { - quote++; - break; - } - } - if (!quote) { - (void)vsb_cat(cli->sb, s); - return; - } - (void)vsb_putc(cli->sb, '"'); - for (q = s; *q != '\0'; q++) { - switch (*q) { - case ' ': - (void)vsb_putc(cli->sb, *q); - break; - case '\\': - case '"': - (void)vsb_putc(cli->sb, '\\'); - (void)vsb_putc(cli->sb, *q); - break; - case '\n': - (void)vsb_cat(cli->sb, "\\n"); - break; - case '\r': - (void)vsb_cat(cli->sb, "\\r"); - break; - case '\t': - (void)vsb_cat(cli->sb, "\\t"); - break; - default: - if (isgraph(*q)) - (void)vsb_putc(cli->sb, *q); - else - (void)vsb_printf(cli->sb, "\\%o", *q); - break; - } - } - (void)vsb_putc(cli->sb, '"'); + vsb_quote(cli->sb, s, 0); } void diff --git a/varnish-cache/lib/libvarnish/vsb.c b/varnish-cache/lib/libvarnish/vsb.c index af9f1701..691906ad 100644 --- a/varnish-cache/lib/libvarnish/vsb.c +++ b/varnish-cache/lib/libvarnish/vsb.c @@ -476,3 +476,55 @@ vsb_done(const struct vsb *s) return(VSB_ISFINISHED(s)); } + +/* + * Quote a string + */ +void +vsb_quote(struct vsb *s, const char *p, int how) +{ + const char *q; + int quote = 0; + + (void)how; /* For future enhancements */ + + for (q = p; *q != '\0'; q++) { + if (!isgraph(*q) || *q == '"') { + quote++; + break; + } + } + if (!quote) { + (void)vsb_cat(s, p); + return; + } + (void)vsb_putc(s, '"'); + for (q = p; *q != '\0'; q++) { + switch (*q) { + case ' ': + (void)vsb_putc(s, *q); + break; + case '\\': + case '"': + (void)vsb_putc(s, '\\'); + (void)vsb_putc(s, *q); + break; + case '\n': + (void)vsb_cat(s, "\\n"); + break; + case '\r': + (void)vsb_cat(s, "\\r"); + break; + case '\t': + (void)vsb_cat(s, "\\t"); + break; + default: + if (isgraph(*q)) + (void)vsb_putc(s, *q); + else + (void)vsb_printf(s, "\\%o", *q); + break; + } + } + (void)vsb_putc(s, '"'); +}