mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-21 19:02:25 +00:00
virsh: Reject negative numbers in vshCommandOptUInt
Use virStrToLong_uip instead of virStrToLong_ui to reject negative numbers in the helper. None of the callers expects the wraparound "feature" for negative numbers. Also add a function that allows wrapping of negative numbers as it might be used in the future and be explicit about the new semantics in the function docs.
This commit is contained in:
parent
7eb0ee175b
commit
37e663adb6
@ -1494,6 +1494,28 @@ vshCommandOptInt(const vshCmd *cmd, const char *name, int *value)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int
|
||||
vshCommandOptUIntInternal(const vshCmd *cmd,
|
||||
const char *name,
|
||||
unsigned int *value,
|
||||
bool wrap)
|
||||
{
|
||||
vshCmdOpt *arg;
|
||||
int ret;
|
||||
|
||||
if ((ret = vshCommandOpt(cmd, name, &arg, true)) <= 0)
|
||||
return ret;
|
||||
|
||||
if (wrap) {
|
||||
if (virStrToLong_ui(arg->data, NULL, 10, value) < 0)
|
||||
return -1;
|
||||
} else {
|
||||
if (virStrToLong_uip(arg->data, NULL, 10, value) < 0)
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* vshCommandOptUInt:
|
||||
@ -1501,22 +1523,28 @@ vshCommandOptInt(const vshCmd *cmd, const char *name, int *value)
|
||||
* @name option name
|
||||
* @value result
|
||||
*
|
||||
* Convert option to unsigned int
|
||||
* Convert option to unsigned int, reject negative numbers
|
||||
* See vshCommandOptInt()
|
||||
*/
|
||||
int
|
||||
vshCommandOptUInt(const vshCmd *cmd, const char *name, unsigned int *value)
|
||||
{
|
||||
vshCmdOpt *arg;
|
||||
int ret;
|
||||
return vshCommandOptUIntInternal(cmd, name, value, false);
|
||||
}
|
||||
|
||||
ret = vshCommandOpt(cmd, name, &arg, true);
|
||||
if (ret <= 0)
|
||||
return ret;
|
||||
|
||||
if (virStrToLong_ui(arg->data, NULL, 10, value) < 0)
|
||||
return -1;
|
||||
return 1;
|
||||
/**
|
||||
* vshCommandOptUIntWrap:
|
||||
* @cmd command reference
|
||||
* @name option name
|
||||
* @value result
|
||||
*
|
||||
* Convert option to unsigned int, wraps negative numbers to positive
|
||||
* See vshCommandOptInt()
|
||||
*/
|
||||
int
|
||||
vshCommandOptUIntWrap(const vshCmd *cmd, const char *name, unsigned int *value)
|
||||
{
|
||||
return vshCommandOptUIntInternal(cmd, name, value, true);
|
||||
}
|
||||
|
||||
|
||||
|
@ -285,6 +285,9 @@ int vshCommandOptInt(const vshCmd *cmd, const char *name, int *value)
|
||||
int vshCommandOptUInt(const vshCmd *cmd, const char *name,
|
||||
unsigned int *value)
|
||||
ATTRIBUTE_NONNULL(3) ATTRIBUTE_RETURN_CHECK;
|
||||
int vshCommandOptUIntWrap(const vshCmd *cmd, const char *name,
|
||||
unsigned int *value)
|
||||
ATTRIBUTE_NONNULL(3) ATTRIBUTE_RETURN_CHECK;
|
||||
int vshCommandOptUL(const vshCmd *cmd, const char *name,
|
||||
unsigned long *value)
|
||||
ATTRIBUTE_NONNULL(3) ATTRIBUTE_RETURN_CHECK;
|
||||
|
Loading…
x
Reference in New Issue
Block a user