From: phk Date: Sat, 19 Jul 2008 07:19:12 +0000 (+0000) Subject: Augment ParseArgv() to also split comma separated lists. X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8f8643b920a73f908c6860e945962b1635b25227;p=varnish Augment ParseArgv() to also split comma separated lists. git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@2954 d4fa192b-c00b-0410-8231-f00ffab90ce4 --- diff --git a/varnish-cache/include/libvarnish.h b/varnish-cache/include/libvarnish.h index 9ae99cad..e68d21a3 100644 --- a/varnish-cache/include/libvarnish.h +++ b/varnish-cache/include/libvarnish.h @@ -39,7 +39,9 @@ /* from libvarnish/argv.c */ void FreeArgv(char **argv); -char **ParseArgv(const char *s, int comment); +char **ParseArgv(const char *s, int flag); +#define ARGV_COMMENT (1 << 0) +#define ARGV_COMMA (1 << 1) /* from libvarnish/crc32.c */ uint32_t crc32(uint32_t crc, const void *p1, unsigned l); diff --git a/varnish-cache/lib/libvarnish/argv.c b/varnish-cache/lib/libvarnish/argv.c index f5b6ea8b..c161cb9f 100644 --- a/varnish-cache/lib/libvarnish/argv.c +++ b/varnish-cache/lib/libvarnish/argv.c @@ -124,8 +124,11 @@ BackSlashDecode(const char *s, const char *e) return (p); } +static char err_invalid_backslash[] = "Invalid backslash sequence"; +static char err_missing_quote[] = "Missing '\"'"; + char ** -ParseArgv(const char *s, int comment) +ParseArgv(const char *s, int flag) { char **argv; const char *p; @@ -146,7 +149,7 @@ ParseArgv(const char *s, int comment) s++; continue; } - if (comment && *s == '#') + if ((flag & ARGV_COMMENT) && *s == '#') break; if (*s == '"') { p = ++s; @@ -159,7 +162,7 @@ ParseArgv(const char *s, int comment) if (*s == '\\') { i = BackSlash(s, NULL); if (i == 0) { - argv[0] = (void*)(uintptr_t)"Invalid backslash sequence"; + argv[0] = err_invalid_backslash; return (argv); } s += i; @@ -168,13 +171,15 @@ ParseArgv(const char *s, int comment) if (!quote) { if (*s == '\0' || isspace(*s)) break; + if ((flag & ARGV_COMMA) && *s == ',') + break; s++; continue; } if (*s == '"') break; if (*s == '\0') { - argv[0] = (void*)(uintptr_t)"Missing '\"'"; + argv[0] = err_missing_quote; return (argv); } s++;