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.
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
};
{
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;
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