r2954 - in trunk/varnish-cache: include lib/libvarnish

phk at projects.linpro.no phk at projects.linpro.no
Sat Jul 19 09:19:13 CEST 2008


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++;




More information about the varnish-commit mailing list