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:
parent
d27160bb82
commit
e03ef9af7c
@ -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. */
|
|
||||||
if (*timeout > INT_MAX / 1000) {
|
|
||||||
vshError(ctl,
|
|
||||||
_("Numeric value for <%s> option is malformed or out of range"),
|
|
||||||
"timeout");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
*timeout *= 1000;
|
|
||||||
}
|
|
||||||
return rv;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
/* Ensure that the timeout is not zero and that we can convert
|
||||||
|
* it from seconds to milliseconds without overflowing. */
|
||||||
|
if (utimeout == 0 || utimeout > INT_MAX / 1000) {
|
||||||
|
vshError(ctl,
|
||||||
|
_("Numeric value for <%s> option is malformed or out of range"),
|
||||||
|
"timeout");
|
||||||
|
ret = -1;
|
||||||
|
} else {
|
||||||
|
*timeout = ((int) utimeout) * 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
vshConnectionUsability(vshControl *ctl, virConnectPtr conn)
|
vshConnectionUsability(vshControl *ctl, virConnectPtr conn)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user