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.
This commit is contained in:
Willy Tarreau 2024-02-09 20:09:59 +01:00
parent 2673f8be82
commit 66989ff426
2 changed files with 5 additions and 0 deletions

View File

@ -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
};

View File

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