mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
Add error handling to optional arguments in cmdCPUStats
This commit is contained in:
@@ -6140,19 +6140,39 @@ cmdCPUStats(vshControl *ctl, const vshCmd *cmd)
|
|||||||
{
|
{
|
||||||
virDomainPtr dom;
|
virDomainPtr dom;
|
||||||
virTypedParameterPtr params = NULL;
|
virTypedParameterPtr params = NULL;
|
||||||
int i, j, pos, max_id, cpu = -1, show_count = -1, nparams = 0;
|
int i, j, pos, max_id, cpu = 0, show_count = -1, nparams = 0;
|
||||||
bool show_total = false, show_per_cpu = false;
|
bool show_total = false, show_per_cpu = false;
|
||||||
unsigned int flags = 0;
|
unsigned int flags = 0;
|
||||||
bool ret = false;
|
bool ret = false;
|
||||||
|
int rv = 0;
|
||||||
|
|
||||||
if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
|
if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
show_total = vshCommandOptBool(cmd, "total");
|
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;
|
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;
|
show_per_cpu = true;
|
||||||
|
}
|
||||||
|
|
||||||
/* default show per_cpu and total */
|
/* default show per_cpu and total */
|
||||||
if (!show_total && !show_per_cpu) {
|
if (!show_total && !show_per_cpu) {
|
||||||
@@ -6163,15 +6183,14 @@ cmdCPUStats(vshControl *ctl, const vshCmd *cmd)
|
|||||||
if (!show_per_cpu) /* show total stats only */
|
if (!show_per_cpu) /* show total stats only */
|
||||||
goto do_show_total;
|
goto do_show_total;
|
||||||
|
|
||||||
/* check cpu, show_count, and ignore wrong argument */
|
|
||||||
if (cpu < 0)
|
|
||||||
cpu = 0;
|
|
||||||
|
|
||||||
/* get number of cpus on the node */
|
/* get number of cpus on the node */
|
||||||
if ((max_id = virDomainGetCPUStats(dom, NULL, 0, 0, 0, flags)) < 0)
|
if ((max_id = virDomainGetCPUStats(dom, NULL, 0, 0, 0, flags)) < 0)
|
||||||
goto failed_stats;
|
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;
|
show_count = max_id;
|
||||||
|
}
|
||||||
|
|
||||||
/* get percpu information */
|
/* get percpu information */
|
||||||
if ((nparams = virDomainGetCPUStats(dom, NULL, 0, 0, 1, flags)) < 0)
|
if ((nparams = virDomainGetCPUStats(dom, NULL, 0, 0, 1, flags)) < 0)
|
||||||
|
|||||||
Reference in New Issue
Block a user