Mailing List Archive

r2954 - in trunk/varnish-cache: include lib/libvarnish
Author: phk
Date: 2008-07-19 09:19:12 +0200 (Sat, 19 Jul 2008)
New Revision: 2954

Modified:
trunk/varnish-cache/include/libvarnish.h
trunk/varnish-cache/lib/libvarnish/argv.c
Log:
Augment ParseArgv() to also split comma separated lists.



Modified: trunk/varnish-cache/include/libvarnish.h
===================================================================
--- trunk/varnish-cache/include/libvarnish.h 2008-07-19 06:46:42 UTC (rev 2953)
+++ trunk/varnish-cache/include/libvarnish.h 2008-07-19 07:19:12 UTC (rev 2954)
@@ -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);

Modified: trunk/varnish-cache/lib/libvarnish/argv.c
===================================================================
--- trunk/varnish-cache/lib/libvarnish/argv.c 2008-07-19 06:46:42 UTC (rev 2953)
+++ trunk/varnish-cache/lib/libvarnish/argv.c 2008-07-19 07:19:12 UTC (rev 2954)
@@ -124,8 +124,11 @@
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 @@
s++;
continue;
}
- if (comment && *s == '#')
+ if ((flag & ARGV_COMMENT) && *s == '#')
break;
if (*s == '"') {
p = ++s;
@@ -159,7 +162,7 @@
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 @@
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++;