From: Peter Krempa Date: Tue, 3 Jun 2025 15:18:02 +0000 (+0200) Subject: vshCommandRun: Convert to directly return the exit code X-Git-Tag: v11.5.0-rc1~42 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=10c646993da37ed41f4324e7d049d3251a52c956;p=thirdparty%2Flibvirt.git vshCommandRun: Convert to directly return the exit code Currently the handler functions in the virt shells return only a boolean signalling if the command was successful or not. In preparation for a command which will want to return another value (timeout) convert vshCommand run to actually return the requested exit code instead and document the conversion from boolean. Signed-off-by: Peter Krempa Reviewed-by: Ján Tomko --- diff --git a/tools/virsh.c b/tools/virsh.c index 244ca655ee..643ef6b453 100644 --- a/tools/virsh.c +++ b/tools/virsh.c @@ -836,7 +836,7 @@ main(int argc, char **argv) vshControl _ctl = { 0 }; vshControl *ctl = &_ctl; virshControl virshCtl = { 0 }; - bool ret = true; + int ret = EXIT_SUCCESS; ctl->name = "virsh"; /* hardcoded name of the binary */ ctl->env_prefix = "VIRSH"; @@ -930,5 +930,5 @@ main(int argc, char **argv) } virshDeinit(ctl); - exit(ret ? EXIT_SUCCESS : EXIT_FAILURE); + exit(ret); } diff --git a/tools/virt-admin.c b/tools/virt-admin.c index b701ed1fe4..ac8f3202b6 100644 --- a/tools/virt-admin.c +++ b/tools/virt-admin.c @@ -1530,7 +1530,7 @@ main(int argc, char **argv) vshControl _ctl = { 0 }; vshControl *ctl = &_ctl; vshAdmControl virtAdminCtl = { 0 }; - bool ret = true; + int ret = EXIT_SUCCESS; ctl->name = "virt-admin"; /* hardcoded name of the binary */ ctl->env_prefix = "VIRT_ADMIN"; @@ -1612,5 +1612,5 @@ main(int argc, char **argv) } vshAdmDeinit(ctl); - exit(ret ? EXIT_SUCCESS : EXIT_FAILURE); + exit(ret); } diff --git a/tools/vsh.c b/tools/vsh.c index e892cbca22..497b7ec631 100644 --- a/tools/vsh.c +++ b/tools/vsh.c @@ -1341,14 +1341,22 @@ vshBlockJobOptionBandwidth(vshControl *ctl, } -/* - * Executes command(s) and returns return code from last command +/** + * vshCommandRun: + * @ctl: virt shell data + * @cmd: command to execute + * + * Returns return code from last command. Return values from command handlers + * which return boolean are converted as: + * true -> EXIT_SUCCESS + * false -> EXIT_FAILURE */ -bool -vshCommandRun(vshControl *ctl, const vshCmd *cmd) +int +vshCommandRun(vshControl *ctl, + const vshCmd *cmd) { const vshClientHooks *hooks = ctl->hooks; - bool ret = true; + int ret = EXIT_SUCCESS; while (cmd) { gint64 before, after; @@ -1358,16 +1366,19 @@ vshCommandRun(vshControl *ctl, const vshCmd *cmd) if ((cmd->def->flags & VSH_CMD_FLAG_NOCONNECT) || (hooks && hooks->connHandler && hooks->connHandler(ctl))) { - ret = cmd->def->handler(ctl, cmd); + if (cmd->def->handler(ctl, cmd)) + ret = EXIT_SUCCESS; + else + ret = EXIT_FAILURE; } else { /* connection is not usable, return error */ - ret = false; + ret = EXIT_FAILURE; } after = g_get_real_time(); /* try to automatically catch disconnections */ - if (!ret && + if (ret != EXIT_SUCCESS && ((last_error != NULL) && (((last_error->code == VIR_ERR_SYSTEM_ERROR) && (last_error->domain == VIR_FROM_REMOTE)) || @@ -1376,7 +1387,7 @@ vshCommandRun(vshControl *ctl, const vshCmd *cmd) (last_error->code == VIR_ERR_INVALID_CONN)))) disconnected++; - if (!ret) + if (ret != EXIT_SUCCESS) vshReportError(ctl); if (STREQ(cmd->def->name, "quit") || diff --git a/tools/vsh.h b/tools/vsh.h index 3b75216e11..284da36e32 100644 --- a/tools/vsh.h +++ b/tools/vsh.h @@ -287,7 +287,7 @@ int vshBlockJobOptionBandwidth(vshControl *ctl, bool bytes, unsigned long *bandwidth); bool vshCommandOptBool(const vshCmd *cmd, const char *name); -bool vshCommandRun(vshControl *ctl, const vshCmd *cmd); +int vshCommandRun(vshControl *ctl, const vshCmd *cmd); bool vshCommandStringParse(vshControl *ctl, char *cmdstr, vshCmd **partial);