From: Thierry FOURNIER Date: Tue, 10 Dec 2013 17:54:58 +0000 (+0100) Subject: MEDIUM: dumpstat: make the CLI parser understand the backslash as an escape char X-Git-Tag: v1.5-dev20~44 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=48bcfda;p=thirdparty%2Fhaproxy.git 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. --- 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) {