From: Willy Tarreau Date: Fri, 16 Dec 2016 16:59:25 +0000 (+0100) Subject: MINOR: cli: automatically enable a CLI I/O handler when there's no parser X-Git-Tag: v1.8-dev1~266 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=eaffde38c8667668b0ffa76694cb78464a5b4f0b;p=thirdparty%2Fhaproxy.git 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. --- 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; }