On 22.05.2015 10:59, Andrea Bolognani wrote:
> ---
> tests/vcpupin | 4 +-
> tools/virsh-domain-monitor.c | 9 +--
> tools/virsh-domain.c | 134
> +++++++------------------------------------
> tools/virsh-host.c | 57 +++---------------
> tools/virsh-interface.c | 6 +-
> tools/virsh-network.c | 6 +-
> tools/virsh-volume.c | 24 ++------
> tools/virsh.c | 111 +++++++++++++++++++++--------------
> 8 files changed, 104 insertions(+), 247 deletions(-)
Nice cleanup.
> diff --git a/tools/virsh.c b/tools/virsh.c
> index 9f44793..db9354c 100644
> --- a/tools/virsh.c
> +++ b/tools/virsh.c
> @@ -1517,23 +1517,27 @@ vshCommandOpt(const vshCmd *cmd,
> * <0 in all other cases (@value untouched)
> */
Does it makes sense to note in comments that this function (and others that
you're fixing) is reporting an error?
> int
> -vshCommandOptInt(vshControl *ctl ATTRIBUTE_UNUSED, const vshCmd *cmd,
> +vshCommandOptInt(vshControl *ctl, const vshCmd *cmd,
> const char *name, int *value)
> {
> vshCmdOpt *arg;
> int ret;
>
> - ret = vshCommandOpt(cmd, name, &arg, true);
> - if (ret <= 0)
> + if ((ret = vshCommandOpt(cmd, name, &arg, true)) <= 0)
> return ret;
>
> - if (virStrToLong_i(arg->data, NULL, 10, value) < 0)
> - return -1;
> - return 1;
> + if ((ret = virStrToLong_i(arg->data, NULL, 10, value)) < 0)
> + vshError(ctl,
> + _("Numeric value '%s' for <%s> option is malformed or out
> of range"),
> + arg->data, name);
> + else
> + ret = 1;
> +
> + return ret;
> }
>
While reworking this, you've missed vshCommandOptTimeoutToMs() which in case of
something like following '--timeout blah' will report error twice: from both
OptInt() and OptTimeoutToMs():
error: Numeric value 'blah' for <timeout> option is malformed or out of range
error: invalid timeout
I think this should be squashed in:
@@ -1906,11 +1907,13 @@ vshCommandOptTimeoutToMs(vshControl *ctl, const vshCmd
*cmd,
{
int rv = vshCommandOptInt(ctl, cmd, "timeout", timeout);
- if (rv < 0 || (rv > 0 && *timeout < 1)) {
- vshError(ctl, "%s", _("invalid timeout"));
+ if (rv < 0)
return -1;
- }
if (rv > 0) {
+ if (*timeout < 1) {
+ vshError(ctl, "%s", _("invalid timeout"));
+ return -1;
+ }
/* Ensure that we can multiply by 1000 without overflowing. */
if (*timeout > INT_MAX / 1000) {
vshError(ctl, "%s", _("timeout is too big"));
> static int
> -vshCommandOptULongLongInternal(vshControl *ctl ATTRIBUTE_UNUSED, const
> vshCmd *cmd,
> +vshCommandOptULongLongInternal(vshControl *ctl, const vshCmd *cmd,
> const char *name, unsigned long long *value,
> bool wrap)
> {
> @@ -1754,15 +1767,18 @@ vshCommandOptULongLongInternal(vshControl *ctl
> ATTRIBUTE_UNUSED, const vshCmd *c
> 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;
> - }
> + if (wrap)
> + ret = virStrToLong_ull(arg->data, NULL, 10, value);
> + else
> + ret = virStrToLong_ullp(arg->data, NULL, 10, value);
> + if (ret < 0)
> + vshError(ctl,
> + _("Numeric value '%s' for <%s> option is malformed or out
> of range"),
> + arg->data, name);
> + else
> + ret = 1;
>
> - return 1;
> + return ret;
> }
You've missed one ocurrance of vshCommandOptULongLong in cmdAllocpages().
>
> /**
> @@ -1812,7 +1828,7 @@ vshCommandOptULongLongWrap(vshControl *ctl, const
> vshCmd *cmd,
> * See vshCommandOptInt()
> */
> int
> -vshCommandOptScaledInt(vshControl *ctl ATTRIBUTE_UNUSED, const vshCmd *cmd,
> +vshCommandOptScaledInt(vshControl *ctl, const vshCmd *cmd,
> const char *name, unsigned long long *value,
> int scale, unsigned long long max)
> {
> @@ -1825,9 +1841,16 @@ vshCommandOptScaledInt(vshControl *ctl
> ATTRIBUTE_UNUSED, const vshCmd *cmd,
>
> if (virStrToLong_ull(arg->data, &end, 10, value) < 0 ||
> virScaleInteger(value, end, scale, max) < 0)
> - return -1;
> + {
> + vshError(ctl,
> + _("Numeric value '%s' for <%s> option is malformed or out
> of range"),
> + arg->data, name);
> + ret = -1;
> + } else {
> + ret = 1;
> + }
>
> - return 1;
> + return ret;
> }
>
>
>
Interestingly vshCommandOptString() is missing. So far, the only way for the
function to fail is if one uses --option "" and VSH_OFLAG_EMPTY_OK is not
specified. So if we come up with good error message for that case, we are okay
to drop all the other error messages.
Otherwise looking good.
Michal
--
libvir-list mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/libvir-list