[libvirt] [PATCH v2 3/3] virsh: Move error messages inside vshCommandOpt*() functions.

Andrea Bolognani abologna at redhat.com
Thu May 28 09:31:29 UTC 2015


On Wed, 2015-05-27 at 16:47 +0200, Michal Privoznik wrote:

> > 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?

Done. I've only updated the comments for vshCommandOptInt() because all
other functions explicitly refer to that one in their comments.

> 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"));

Agreed, two error messages for a single failure is not something the
user should run into.

I've gone for a slightly different implementation here, which adds two
small commits at the beginning of the series. Please check it out.

> You've missed one ocurrance of vshCommandOptULongLong in cmdAllocpages().

I'd actually missed it the first time around, when I unified all the error
messages. Great catch!

> 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.

I will look into it next, see what I can do :)

Cheers.

-- 
Andrea Bolognani
Software Engineer - Virtualization Team
$ python -c "print('a'.join(['', 'bologn', '@redh', 't.com']))"




More information about the libvir-list mailing list