mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 03:12:22 +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;
|
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:
|
* vshCommandOptUInt:
|
||||||
@ -1501,22 +1523,28 @@ vshCommandOptInt(const vshCmd *cmd, const char *name, int *value)
|
|||||||
* @name option name
|
* @name option name
|
||||||
* @value result
|
* @value result
|
||||||
*
|
*
|
||||||
* Convert option to unsigned int
|
* Convert option to unsigned int, reject negative numbers
|
||||||
* See vshCommandOptInt()
|
* See vshCommandOptInt()
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
vshCommandOptUInt(const vshCmd *cmd, const char *name, unsigned int *value)
|
vshCommandOptUInt(const vshCmd *cmd, const char *name, unsigned int *value)
|
||||||
{
|
{
|
||||||
vshCmdOpt *arg;
|
return vshCommandOptUIntInternal(cmd, name, value, false);
|
||||||
int ret;
|
}
|
||||||
|
|
||||||
ret = vshCommandOpt(cmd, name, &arg, true);
|
/**
|
||||||
if (ret <= 0)
|
* vshCommandOptUIntWrap:
|
||||||
return ret;
|
* @cmd command reference
|
||||||
|
* @name option name
|
||||||
if (virStrToLong_ui(arg->data, NULL, 10, value) < 0)
|
* @value result
|
||||||
return -1;
|
*
|
||||||
return 1;
|
* 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,
|
int vshCommandOptUInt(const vshCmd *cmd, const char *name,
|
||||||
unsigned int *value)
|
unsigned int *value)
|
||||||
ATTRIBUTE_NONNULL(3) ATTRIBUTE_RETURN_CHECK;
|
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,
|
int vshCommandOptUL(const vshCmd *cmd, const char *name,
|
||||||
unsigned long *value)
|
unsigned long *value)
|
||||||
ATTRIBUTE_NONNULL(3) ATTRIBUTE_RETURN_CHECK;
|
ATTRIBUTE_NONNULL(3) ATTRIBUTE_RETURN_CHECK;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user