From 48bcfdab24d1823eb84b261ed2458b9ff9fef315 Mon Sep 17 00:00:00 2001 From: Thierry FOURNIER Date: Tue, 10 Dec 2013 18:54:58 +0100 Subject: [PATCH] MEDIUM: dumpstat: make the CLI parser understand the backslash as an escape char We'll need to pass patterns on the CLI for lookups. Till now there was no need for a backslash, so it's still time to support them just like in the config file. --- src/dumpstats.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/dumpstats.c b/src/dumpstats.c index d1518b8db2..96c5cead4a 100644 --- a/src/dumpstats.c +++ b/src/dumpstats.c @@ -926,6 +926,7 @@ static int stats_sock_parse_request(struct stream_interface *si, char *line) struct appctx *appctx = __objt_appctx(si->end); char *args[MAX_STATS_ARGS + 1]; int arg; + int i, j; while (isspace((unsigned char)*line)) line++; @@ -934,7 +935,12 @@ static int stats_sock_parse_request(struct stream_interface *si, char *line) args[arg] = line; while (*line && arg < MAX_STATS_ARGS) { - if (isspace((unsigned char)*line)) { + if (*line == '\\') { + line++; + if (*line == '\0') + break; + } + else if (isspace((unsigned char)*line)) { *line++ = '\0'; while (isspace((unsigned char)*line)) @@ -950,6 +956,20 @@ static int stats_sock_parse_request(struct stream_interface *si, char *line) while (++arg <= MAX_STATS_ARGS) args[arg] = line; + /* remove \ */ + arg = 0; + while (*args[arg] != '\0') { + j = 0; + for (i=0; args[arg][i] != '\0'; i++) { + if (args[arg][i] == '\\') + continue; + args[arg][j] = args[arg][i]; + j++; + } + args[arg][j] = '\0'; + arg++; + } + appctx->ctx.stats.flags = 0; if (strcmp(args[0], "show") == 0) { if (strcmp(args[1], "stat") == 0) { -- 2.39.5