mirror of https://gitee.com/openkylin/libvirt.git
virsh: Reject negative numbers in vshCommandOptULongLong
To follow the new semantics of the vshCommandOptToU* functions convert this one to reject negative numbers too. To allow using -1 for "maximum" semantics for the vol-*load two bandwidth functions that use this helper introduce vshCommandOptULongLongWrap.
This commit is contained in:
parent
0e2d73051a
commit
c62125395b
|
@ -677,12 +677,12 @@ cmdVolUpload(vshControl *ctl, const vshCmd *cmd)
|
||||||
const char *name = NULL;
|
const char *name = NULL;
|
||||||
unsigned long long offset = 0, length = 0;
|
unsigned long long offset = 0, length = 0;
|
||||||
|
|
||||||
if (vshCommandOptULongLong(cmd, "offset", &offset) < 0) {
|
if (vshCommandOptULongLongWrap(cmd, "offset", &offset) < 0) {
|
||||||
vshError(ctl, _("Unable to parse integer"));
|
vshError(ctl, _("Unable to parse integer"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vshCommandOptULongLong(cmd, "length", &length) < 0) {
|
if (vshCommandOptULongLongWrap(cmd, "length", &length) < 0) {
|
||||||
vshError(ctl, _("Unable to parse integer"));
|
vshError(ctl, _("Unable to parse integer"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -787,12 +787,12 @@ cmdVolDownload(vshControl *ctl, const vshCmd *cmd)
|
||||||
unsigned long long offset = 0, length = 0;
|
unsigned long long offset = 0, length = 0;
|
||||||
bool created = false;
|
bool created = false;
|
||||||
|
|
||||||
if (vshCommandOptULongLong(cmd, "offset", &offset) < 0) {
|
if (vshCommandOptULongLongWrap(cmd, "offset", &offset) < 0) {
|
||||||
vshError(ctl, _("Unable to parse integer"));
|
vshError(ctl, _("Unable to parse integer"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vshCommandOptULongLong(cmd, "length", &length) < 0) {
|
if (vshCommandOptULongLongWrap(cmd, "length", &length) < 0) {
|
||||||
vshError(ctl, _("Unable to parse integer"));
|
vshError(ctl, _("Unable to parse integer"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1699,31 +1699,60 @@ vshCommandOptLongLong(const vshCmd *cmd, const char *name,
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
vshCommandOptULongLongInternal(const vshCmd *cmd,
|
||||||
|
const char *name,
|
||||||
|
unsigned long long *value,
|
||||||
|
bool wrap)
|
||||||
|
{
|
||||||
|
vshCmdOpt *arg;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
if ((ret = vshCommandOpt(cmd, name, &arg, true)) <= 0)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
if (wrap) {
|
||||||
|
if (virStrToLong_ull(arg->data, NULL, 10, value) < 0)
|
||||||
|
return -1;
|
||||||
|
} else {
|
||||||
|
if (virStrToLong_ullp(arg->data, NULL, 10, value) < 0)
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* vshCommandOptULongLong:
|
* vshCommandOptULongLong:
|
||||||
* @cmd command reference
|
* @cmd command reference
|
||||||
* @name option name
|
* @name option name
|
||||||
* @value result
|
* @value result
|
||||||
*
|
*
|
||||||
* Returns option as long long
|
* Returns option as long long, rejects negative numbers
|
||||||
* See vshCommandOptInt()
|
* See vshCommandOptInt()
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
vshCommandOptULongLong(const vshCmd *cmd, const char *name,
|
vshCommandOptULongLong(const vshCmd *cmd, const char *name,
|
||||||
unsigned long long *value)
|
unsigned long long *value)
|
||||||
{
|
{
|
||||||
vshCmdOpt *arg;
|
return vshCommandOptULongLongInternal(cmd, name, value, false);
|
||||||
int ret;
|
|
||||||
|
|
||||||
ret = vshCommandOpt(cmd, name, &arg, true);
|
|
||||||
if (ret <= 0)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
if (virStrToLong_ull(arg->data, NULL, 10, value) < 0)
|
|
||||||
return -1;
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* vshCommandOptULongLongWrap:
|
||||||
|
* @cmd command reference
|
||||||
|
* @name option name
|
||||||
|
* @value result
|
||||||
|
*
|
||||||
|
* Returns option as long long, wraps negative numbers to positive
|
||||||
|
* See vshCommandOptInt()
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
vshCommandOptULongLongWrap(const vshCmd *cmd, const char *name,
|
||||||
|
unsigned long long *value)
|
||||||
|
{
|
||||||
|
return vshCommandOptULongLongInternal(cmd, name, value, true);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* vshCommandOptScaledInt:
|
* vshCommandOptScaledInt:
|
||||||
|
|
|
@ -307,6 +307,9 @@ int vshCommandOptLongLong(const vshCmd *cmd, const char *name,
|
||||||
int vshCommandOptULongLong(const vshCmd *cmd, const char *name,
|
int vshCommandOptULongLong(const vshCmd *cmd, const char *name,
|
||||||
unsigned long long *value)
|
unsigned long long *value)
|
||||||
ATTRIBUTE_NONNULL(3) ATTRIBUTE_RETURN_CHECK;
|
ATTRIBUTE_NONNULL(3) ATTRIBUTE_RETURN_CHECK;
|
||||||
|
int vshCommandOptULongLongWrap(const vshCmd *cmd, const char *name,
|
||||||
|
unsigned long long *value)
|
||||||
|
ATTRIBUTE_NONNULL(3) ATTRIBUTE_RETURN_CHECK;
|
||||||
int vshCommandOptScaledInt(const vshCmd *cmd, const char *name,
|
int vshCommandOptScaledInt(const vshCmd *cmd, const char *name,
|
||||||
unsigned long long *value, int scale,
|
unsigned long long *value, int scale,
|
||||||
unsigned long long max)
|
unsigned long long max)
|
||||||
|
|
Loading…
Reference in New Issue