[master] 4607e60 Give ParseArgv() and "int *argc" argument and a ARGV_NOESC flag
Poul-Henning Kamp
phk at varnish-cache.org
Wed May 18 10:26:01 CEST 2011
commit 4607e6046ee3f1c429fc14820269a6627c3be48c
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Wed May 18 08:25:29 2011 +0000
Give ParseArgv() and "int *argc" argument and a ARGV_NOESC flag
diff --git a/bin/varnishd/cache_hash.c b/bin/varnishd/cache_hash.c
index c25d0ab..14e3841 100644
--- a/bin/varnishd/cache_hash.c
+++ b/bin/varnishd/cache_hash.c
@@ -738,7 +738,7 @@ HSH_config(const char *h_arg)
const struct hash_slinger *hp;
ASSERT_MGT();
- av = ParseArgv(h_arg, ARGV_COMMA);
+ av = ParseArgv(h_arg, NULL, ARGV_COMMA);
AN(av);
if (av[0] != NULL)
diff --git a/bin/varnishd/cache_vrt.c b/bin/varnishd/cache_vrt.c
index 4cb9e9c..c20e243 100644
--- a/bin/varnishd/cache_vrt.c
+++ b/bin/varnishd/cache_vrt.c
@@ -467,7 +467,7 @@ VRT_ban_string(struct sess *sp, const char *str)
int i;
(void)sp;
- av = ParseArgv(str, 0);
+ av = ParseArgv(str, NULL, 0);
if (av[0] != NULL) {
/* XXX: report error how ? */
FreeArgv(av);
diff --git a/bin/varnishd/mgt_param.c b/bin/varnishd/mgt_param.c
index 72e5939..7c2ccb1 100644
--- a/bin/varnishd/mgt_param.c
+++ b/bin/varnishd/mgt_param.c
@@ -354,7 +354,7 @@ tweak_listen_address(struct cli *cli, const struct parspec *par,
return;
}
- av = ParseArgv(arg, ARGV_COMMA);
+ av = ParseArgv(arg, NULL, ARGV_COMMA);
if (av == NULL) {
cli_out(cli, "Parse error: out of memory");
cli_result(cli, CLIS_PARAM);
diff --git a/bin/varnishd/mgt_shmem.c b/bin/varnishd/mgt_shmem.c
index e0a371d..81e5a4e 100644
--- a/bin/varnishd/mgt_shmem.c
+++ b/bin/varnishd/mgt_shmem.c
@@ -206,7 +206,7 @@ mgt_SHM_Init(const char *l_arg)
if (l_arg == NULL)
l_arg = "";
- av = ParseArgv(l_arg, ARGV_COMMA);
+ av = ParseArgv(l_arg, NULL, ARGV_COMMA);
AN(av);
if (av[0] != NULL)
ARGV_ERR("\t-l ...: %s", av[0]);
diff --git a/bin/varnishd/stevedore.c b/bin/varnishd/stevedore.c
index 4feb189..1a6cab1 100644
--- a/bin/varnishd/stevedore.c
+++ b/bin/varnishd/stevedore.c
@@ -438,9 +438,9 @@ STV_Config(const char *spec)
p = strchr(spec, '=');
q = strchr(spec, ',');
if (p != NULL && (q == NULL || q > p)) {
- av = ParseArgv(p + 1, ARGV_COMMA);
+ av = ParseArgv(p + 1, NULL, ARGV_COMMA);
} else {
- av = ParseArgv(spec, ARGV_COMMA);
+ av = ParseArgv(spec, NULL, ARGV_COMMA);
p = NULL;
}
AN(av);
diff --git a/bin/varnishd/varnishd.c b/bin/varnishd/varnishd.c
index 32d97e8..5bcea1a 100644
--- a/bin/varnishd/varnishd.c
+++ b/bin/varnishd/varnishd.c
@@ -185,7 +185,7 @@ tackle_warg(const char *argv)
char **av;
unsigned int u;
- av = ParseArgv(argv, ARGV_COMMA);
+ av = ParseArgv(argv, NULL, ARGV_COMMA);
AN(av);
if (av[0] != NULL)
diff --git a/include/argv.h b/include/argv.h
index d2ece25..0aa7cef 100644
--- a/include/argv.h
+++ b/include/argv.h
@@ -29,8 +29,9 @@
*/
void FreeArgv(char **argv);
-char **ParseArgv(const char *s, int flag);
+char **ParseArgv(const char *s, int *argc, int flag);
char *BackSlashDecode(const char *s, const char *e);
int BackSlash(const char *s, char *res);
#define ARGV_COMMENT (1 << 0)
#define ARGV_COMMA (1 << 1)
+#define ARGV_NOESC (1 << 2)
diff --git a/lib/libvarnish/argv.c b/lib/libvarnish/argv.c
index b2f4243..d8fefa2 100644
--- a/lib/libvarnish/argv.c
+++ b/lib/libvarnish/argv.c
@@ -131,7 +131,7 @@ static char err_invalid_backslash[] = "Invalid backslash sequence";
static char err_missing_quote[] = "Missing '\"'";
char **
-ParseArgv(const char *s, int flag)
+ParseArgv(const char *s, int *argc, int flag)
{
char **argv;
const char *p;
@@ -162,7 +162,7 @@ ParseArgv(const char *s, int flag)
quote = 0;
}
while (1) {
- if (*s == '\\') {
+ if (*s == '\\' && !(flag & ARGV_NOESC)) {
i = BackSlash(s, NULL);
if (i == 0) {
argv[0] = err_invalid_backslash;
@@ -195,7 +195,9 @@ ParseArgv(const char *s, int flag)
if (*s != '\0')
s++;
}
- argv[nargv++] = NULL;
+ argv[nargv] = NULL;
+ if (argc != NULL)
+ *argc = nargv;
return (argv);
}
diff --git a/lib/libvarnish/cli_serve.c b/lib/libvarnish/cli_serve.c
index a666654..6306dff 100644
--- a/lib/libvarnish/cli_serve.c
+++ b/lib/libvarnish/cli_serve.c
@@ -323,7 +323,7 @@ cls_vlu(void *priv, const char *p)
return (0);
REPLACE(cli->cmd, p);
- av = ParseArgv(p, 0);
+ av = ParseArgv(p, NULL, 0);
AN(av);
if (av[0] != NULL) {
i = cls_vlu2(priv, av);
diff --git a/lib/libvarnishapi/vsc.c b/lib/libvarnishapi/vsc.c
index 5b870d5..d47584f 100644
--- a/lib/libvarnishapi/vsc.c
+++ b/lib/libvarnishapi/vsc.c
@@ -123,7 +123,7 @@ vsc_sf_arg(const struct VSM_data *vd, const char *opt)
vsc->sf_init = 1;
}
- av = ParseArgv(opt, ARGV_COMMA);
+ av = ParseArgv(opt, NULL, ARGV_COMMA);
AN(av);
if (av[0] != NULL) {
vd->diag(vd->priv, "Parse error: %s", av[0]);
More information about the varnish-commit
mailing list