From: Willy Tarreau Date: Fri, 9 Feb 2024 19:09:59 +0000 (+0100) Subject: MINOR: cli/wait: also pass up to 4 arguments to the external conditions X-Git-Tag: v3.0-dev3~5 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=66989ff4263a61948b2c240ec952b524e6f5890a;p=thirdparty%2Fhaproxy.git MINOR: cli/wait: also pass up to 4 arguments to the external conditions Conditions will need to have context, arguments etc from the command line. Since these will vary with time (otherwise we wouldn't wait), let's just pass them as text (possibly pre-processed). We're starting with 4 strings that are expected to be allocated by strdup() and are always sent to free() upon release. --- diff --git a/include/haproxy/cli-t.h b/include/haproxy/cli-t.h index bc868683cf..4a11893ed6 100644 --- a/include/haproxy/cli-t.h +++ b/include/haproxy/cli-t.h @@ -101,6 +101,7 @@ struct cli_wait_ctx { uint start, deadline; // both are in ticks. enum cli_wait_cond cond; // CLI_WAIT_COND_* enum cli_wait_err error; // CLI_WAIT_ERR_* + char *args[4]; // up to 4 args taken at parse time, all strduped const char *msg; // static error message for failures if not NULL }; diff --git a/src/cli.c b/src/cli.c index 1cede7729e..786f2a24e6 100644 --- a/src/cli.c +++ b/src/cli.c @@ -2116,6 +2116,7 @@ static void cli_release_wait(struct appctx *appctx) { struct cli_wait_ctx *ctx = appctx->svcctx; const char *msg; + int i; switch (ctx->error) { case CLI_WAIT_ERR_EXP: msg = "Wait delay expired.\n"; break; @@ -2124,6 +2125,9 @@ static void cli_release_wait(struct appctx *appctx) default: msg = "Done.\n"; break; } + for (i = 0; i < sizeof(ctx->args) / sizeof(ctx->args[0]); i++) + ha_free(&ctx->args[i]); + if (ctx->error == CLI_WAIT_ERR_DONE) cli_msg(appctx, LOG_INFO, msg); else