From eaffde38c8667668b0ffa76694cb78464a5b4f0b Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Fri, 16 Dec 2016 17:59:25 +0100 Subject: [PATCH] MINOR: cli: automatically enable a CLI I/O handler when there's no parser Sometimes a registered keyword will not need any specific parsing nor initialization, so it's annoying to have to write an empty parsing function returning zero just for this. This patch makes it possible to automatically call a keyword's I/O handler of when the parsing function is not defined, while still allowing a parser to set the I/O handler itself. --- src/cli.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/cli.c b/src/cli.c index a875d38448..12556bc116 100644 --- a/src/cli.c +++ b/src/cli.c @@ -398,6 +398,8 @@ int cli_has_level(struct appctx *appctx, int level) * it. It will possilbly leave st0 to CLI_ST_CALLBACK if the keyword needs to * have its own I/O handler called again. Most of the time, parsers will only * set st0 to CLI_ST_PRINT and put their message to be displayed into cli.msg. + * If a keyword parser is NULL and an I/O handler is declared, the I/O handler + * will automatically be used. */ static int cli_parse_request(struct appctx *appctx, char *line) { @@ -458,11 +460,11 @@ static int cli_parse_request(struct appctx *appctx, char *line) appctx->st2 = 0; kw = cli_find_kw(args); - if (!kw || !kw->parse) + if (!kw) return 0; appctx->io_handler = kw->io_handler; - if (kw->parse(args, appctx, kw->private) == 0 && appctx->io_handler) { + if ((!kw->parse || kw->parse(args, appctx, kw->private) == 0) && appctx->io_handler) { appctx->st0 = CLI_ST_CALLBACK; appctx->io_release = kw->io_release; } -- 2.47.3