--- 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; + } 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) -- 1.8.1.4 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list