1
0

virsh: Improve vshCommandOptTimeoutToMs()

Use vshCommandOptUInt() instead of parsing the value as a signed
integer and checking whether it's positive afterwards.

Improve comments as well.
This commit is contained in:
Andrea Bolognani 2015-06-02 11:17:26 +02:00 committed by John Ferlan
parent d27160bb82
commit e03ef9af7c

View File

@ -1860,33 +1860,42 @@ vshCommandOptArgv(const vshCmd *cmd, const vshCmdOpt *opt)
return NULL; return NULL;
} }
/* Parse an optional --timeout parameter in seconds, but store the /*
* value of the timeout in milliseconds. Return -1 on error, 0 if * vshCommandOptTimeoutToMs:
* no timeout was requested, and 1 if timeout was set. */ * @ctl virsh control structure
* @cmd command reference
* @timeout result
*
* Parse an optional --timeout parameter in seconds, but store the
* value of the timeout in milliseconds.
* See vshCommandOptInt()
*/
int int
vshCommandOptTimeoutToMs(vshControl *ctl, const vshCmd *cmd, int *timeout) vshCommandOptTimeoutToMs(vshControl *ctl, const vshCmd *cmd, int *timeout)
{ {
int rv = vshCommandOptInt(cmd, "timeout", timeout); int ret;
unsigned int utimeout;
if (rv < 0 || (rv > 0 && *timeout < 1)) { if ((ret = vshCommandOptUInt(cmd, "timeout", &utimeout)) < 0)
vshError(ctl, vshError(ctl,
_("Numeric value for <%s> option is malformed or out of range"), _("Numeric value for <%s> option is malformed or out of range"),
"timeout"); "timeout");
return -1; if (ret <= 0)
} return ret;
if (rv > 0) {
/* Ensure that we can multiply by 1000 without overflowing. */ /* Ensure that the timeout is not zero and that we can convert
if (*timeout > INT_MAX / 1000) { * it from seconds to milliseconds without overflowing. */
if (utimeout == 0 || utimeout > INT_MAX / 1000) {
vshError(ctl, vshError(ctl,
_("Numeric value for <%s> option is malformed or out of range"), _("Numeric value for <%s> option is malformed or out of range"),
"timeout"); "timeout");
return -1; ret = -1;
} } else {
*timeout *= 1000; *timeout = ((int) utimeout) * 1000;
}
return rv;
} }
return ret;
}
static bool static bool
vshConnectionUsability(vshControl *ctl, virConnectPtr conn) vshConnectionUsability(vshControl *ctl, virConnectPtr conn)