Since we'll support waiting for an action to succeed or permanently
fail, we need the ability to return an unrecoverable failure. Let's
add CLI_WAIT_ERR_FAIL for this. A static error message may be placed
into ctx->msg to report to the user why the failure is unrecoverable.
CLI_WAIT_ERR_DONE, // condition satisfied
CLI_WAIT_ERR_INTR, // interrupted
CLI_WAIT_ERR_EXP, // finished on wait expiration
+ CLI_WAIT_ERR_FAIL, // finished early (unrecoverable)
};
enum cli_wait_cond {
uint start, deadline; // both are in ticks.
enum cli_wait_cond cond; // CLI_WAIT_COND_*
enum cli_wait_err error; // CLI_WAIT_ERR_*
+ const char *msg; // static error message for failures if not NULL
};
struct cli_kw {
switch (ctx->error) {
case CLI_WAIT_ERR_EXP: msg = "Wait delay expired.\n"; break;
case CLI_WAIT_ERR_INTR: msg = "Interrupted.\n"; break;
+ case CLI_WAIT_ERR_FAIL: msg = ctx->msg ? ctx->msg : "Failed.\n"; break;
default: msg = "Done.\n"; break;
}