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.
This commit is contained in:
Thierry FOURNIER 2013-12-10 18:54:58 +01:00 committed by Willy Tarreau
parent c64de3f1bc
commit 48bcfdab24

View File

@ -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) {