[libvirt] [PATCHv2] virsh: Make vshCommandOpt* report error

Ján Tomko jtomko at redhat.com
Mon Apr 14 15:59:04 UTC 2014


On 04/04/2014 03:50 PM, Michal Privoznik wrote:
> Currently, the virsh code is plenty of the following pattern:
> 
>   if (vshCommandOptUInt(..) < 0) {
>       vshError(...);
>       goto cleanup;
>   }
> 
> It doesn't make much sense to repeat the code everywhere.
> Moreover, some functions from the family already report
> error some of them don't.
> 
> Signed-off-by: Michal Privoznik <mprivozn at redhat.com>
> ---
>  tests/vcpupin                |   2 +-
>  tools/virsh-domain-monitor.c |   7 +--
>  tools/virsh-domain.c         | 102 +++++++++++++++----------------------------
>  tools/virsh-host.c           |  25 +++--------
>  tools/virsh-interface.c      |   4 +-
>  tools/virsh-network.c        |   4 +-
>  tools/virsh-volume.c         |  16 ++-----
>  tools/virsh.c                |  99 +++++++++++++++++++++++++++++++----------
>  tools/virsh.h                |  24 +++++-----
>  9 files changed, 140 insertions(+), 143 deletions(-)
> 

> @@ -5819,9 +5806,7 @@ cmdVcpuPin(vshControl *ctl, const vshCmd *cmd)
>      query = !cpulist;
>  
>      /* In query mode, "vcpu" is optional */
> -    if (vshCommandOptInt(cmd, "vcpu", &vcpu) < !query) {
> -        vshError(ctl, "%s",
> -                 _("vcpupin: Invalid or missing vCPU number."));
> +    if (vshCommandOptInt(ctl, cmd, "vcpu", &vcpu) < !query) {

This should report an error for a missing option if query == false.

>          virDomainFree(dom);
>          return false;
>      }

> @@ -8123,9 +8099,11 @@ cmdQemuAttach(vshControl *ctl, const vshCmd *cmd)
>      bool ret = false;
>      unsigned int flags = 0;
>      unsigned int pid_value; /* API uses unsigned int, not pid_t */
> +    int rv;
>  
> -    if (vshCommandOptUInt(cmd, "pid", &pid_value) <= 0) {
> -        vshError(ctl, "%s", _("missing pid value"));
> +    if ((rv = vshCommandOptUInt(ctl, cmd, "pid", &pid_value)) <= 0) {
> +        if (rv == 0)
> +            vshError(ctl, "%s", _("missing pid value"));

pid has the VSH_OFLAG_REQ flag set, 0 shouldn't be returned here.


>          goto cleanup;
>      }
>  
> @@ -1469,6 +1469,7 @@ vshCommandOpt(const vshCmd *cmd, const char *name, vshCmdOpt **opt,
>  
>  /**
>   * vshCommandOptInt:
> + * @ctl virsh control structure
>   * @cmd command reference
>   * @name option name
>   * @value result
> @@ -1480,7 +1481,10 @@ vshCommandOpt(const vshCmd *cmd, const char *name, vshCmdOpt **opt,
>   * <0 in all other cases (@value untouched)
>   */
>  int
> -vshCommandOptInt(const vshCmd *cmd, const char *name, int *value)
> +vshCommandOptInt(vshControl *ctl,
> +                 const vshCmd *cmd,
> +                 const char *name,
> +                 int *value)
>  {
>      vshCmdOpt *arg;
>      int ret;
> @@ -1489,14 +1493,19 @@ vshCommandOptInt(const vshCmd *cmd, const char *name, int *value)
>      if (ret <= 0)

Here you don't report an error for -1,

>          return ret;
>  
> -    if (virStrToLong_i(arg->data, NULL, 10, value) < 0)
> +    if (virStrToLong_i(arg->data, NULL, 10, value) < 0) {
> +        vshError(ctl,
> +                 _("Unable to parse integer parameter to --%s"),
> +                 name);

here you do.

>          return -1;
> +    }
>      return 1;
>  }
>  

Jan


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20140414/e7c32de4/attachment-0001.sig>


More information about the libvir-list mailing list