[libvirt] [PATCH v2 2/2] Add error handling to optional arguments in cmdCPUStats

Ján Tomko jtomko at redhat.com
Thu Apr 11 16:47:39 UTC 2013


On 04/08/2013 05:35 PM, John Ferlan wrote:
> ---
>  tools/virsh-domain.c | 29 ++++++++++++++++++++++++++---
>  1 file changed, 26 insertions(+), 3 deletions(-)
> 
> diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
> index e6e6877..6d760f2 100644
> --- a/tools/virsh-domain.c
> +++ b/tools/virsh-domain.c
> @@ -6144,15 +6144,35 @@ cmdCPUStats(vshControl *ctl, const vshCmd *cmd)
>      bool show_total = false, show_per_cpu = false;
>      unsigned int flags = 0;
>      bool ret = false;
> +    int rv = 0;
>  
>      if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
>          return false;
>  
>      show_total = vshCommandOptBool(cmd, "total");
> -    if (vshCommandOptInt(cmd, "start", &cpu) > 0)
> +
> +    if ((rv = vshCommandOptInt(cmd, "start", &cpu)) < 0) {
> +        vshError(ctl, "%s", _("Unable to parse integer parameter for start"));
> +        goto cleanup;
> +    } else if (rv > 0) {
> +        if (cpu < 0) {
> +            vshError(ctl, "%s", _("Invalid value for start CPU"));
> +            goto cleanup;
> +        }

Since we don't allow negative -start values now, you can initialize cpu
to 0 instead of -1 and get rid of this hunk:

     /* check cpu, show_count, and ignore wrong argument */
     if (cpu < 0)
         cpu = 0;

>          show_per_cpu = true;
> -    if (vshCommandOptInt(cmd, "count", &show_count) > 0)
> +    }
> +
> +    if ((rv = vshCommandOptInt(cmd, "count", &show_count)) < 0) {
> +        vshError(ctl, "%s",
> +                 _("Unable to parse integer parameter for CPUs to show"));
> +        goto cleanup;
> +    } else if (rv > 0) {
> +        if (show_count < 0) {
> +            vshError(ctl, "%s", _("Invalid value for number of CPUs to show"));
> +            goto cleanup;
> +        }
>          show_per_cpu = true;
> +    }
>  
>      /* default show per_cpu and total */
>      if (!show_total && !show_per_cpu) {
> @@ -6170,8 +6190,11 @@ cmdCPUStats(vshControl *ctl, const vshCmd *cmd)
>      /* get number of cpus on the node */
>      if ((max_id = virDomainGetCPUStats(dom, NULL, 0, 0, 0, flags)) < 0)
>          goto failed_stats;
> -    if (show_count < 0 || show_count > max_id)
> +    if (show_count < 0 || show_count > max_id) {
> +        if (show_count > max_id)
> +            vshPrint(ctl, _("Only %d CPUs available to show\n"), max_id);
>          show_count = max_id;
> +    }
>  
>      /* get percpu information */
>      if ((nparams = virDomainGetCPUStats(dom, NULL, 0, 0, 1, flags)) < 0)
> 

ACK

Jan




More information about the libvir-list mailing list