r3515 - in trunk/varnish-cache: include lib/libvarnish
phk at projects.linpro.no
phk at projects.linpro.no
Sun Jan 18 15:50:21 CET 2009
Author: phk
Date: 2009-01-18 15:50:20 +0100 (Sun, 18 Jan 2009)
New Revision: 3515
Modified:
trunk/varnish-cache/include/vsb.h
trunk/varnish-cache/lib/libvarnish/cli_common.c
trunk/varnish-cache/lib/libvarnish/vsb.c
Log:
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.
Modified: trunk/varnish-cache/include/vsb.h
===================================================================
--- trunk/varnish-cache/include/vsb.h 2009-01-18 14:26:32 UTC (rev 3514)
+++ trunk/varnish-cache/include/vsb.h 2009-01-18 14:50:20 UTC (rev 3515)
@@ -77,6 +77,7 @@
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
Modified: trunk/varnish-cache/lib/libvarnish/cli_common.c
===================================================================
--- trunk/varnish-cache/lib/libvarnish/cli_common.c 2009-01-18 14:26:32 UTC (rev 3514)
+++ trunk/varnish-cache/lib/libvarnish/cli_common.c 2009-01-18 14:50:20 UTC (rev 3515)
@@ -72,48 +72,8 @@
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
Modified: trunk/varnish-cache/lib/libvarnish/vsb.c
===================================================================
--- trunk/varnish-cache/lib/libvarnish/vsb.c 2009-01-18 14:26:32 UTC (rev 3514)
+++ trunk/varnish-cache/lib/libvarnish/vsb.c 2009-01-18 14:50:20 UTC (rev 3515)
@@ -476,3 +476,55 @@
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, '"');
+}
More information about the varnish-commit
mailing list