1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2024-12-22 17:34:18 +03:00

Tue Jun 19 10:30:00 BST 2007 Richard W.M. Jones <rjones@redhat.com>

* src/virsh.c: vcpupin command now documented properly and
          gives clearer error messages if the cpulist is wrong
          (Masayuki Sunou).
This commit is contained in:
Richard W.M. Jones 2007-06-19 09:32:04 +00:00
parent a03844f8ca
commit 3b7046a743
2 changed files with 45 additions and 1 deletions

View File

@ -1,3 +1,9 @@
Tue Jun 19 10:30:00 BST 2007 Richard W.M. Jones <rjones@redhat.com>
* src/virsh.c: vcpupin command now documented properly and
gives clearer error messages if the cpulist is wrong
(Masayuki Sunou).
Tue Jun 19 11:11:18 CEST 2007 Daniel Veillard <veillard@redhat.com>
* src/xend_internal.c: drop the release information as this

View File

@ -1508,7 +1508,7 @@ cmdVcpuinfo(vshControl * ctl, vshCmd * cmd)
* "vcpupin" command
*/
static vshCmdInfo info_vcpupin[] = {
{"syntax", "vcpupin <domain>"},
{"syntax", "vcpupin <domain> <vcpu> <cpulist>"},
{"help", gettext_noop("control domain vcpu affinity")},
{"desc", gettext_noop("Pin domain VCPUs to host physical CPUs.")},
{NULL, NULL}
@ -1533,6 +1533,8 @@ cmdVcpupin(vshControl * ctl, vshCmd * cmd)
int vcpufound = 0;
unsigned char *cpumap;
int cpumaplen;
int i;
enum { expect_num, expect_num_or_comma } state;
if (!vshConnectionUsability(ctl, ctl->conn, TRUE))
return FALSE;
@ -1566,6 +1568,42 @@ cmdVcpupin(vshControl * ctl, vshCmd * cmd)
return FALSE;
}
/* Check that the cpulist parameter is a comma-separated list of
* numbers and give an intelligent error message if not.
*/
if (cpulist[0] == '\0') {
vshError(ctl, FALSE, _("cpulist: Invalid format. Empty string."));
virDomainFree (dom);
return FALSE;
}
state = expect_num;
for (i = 0; cpulist[i]; i++) {
switch (state) {
case expect_num:
if (!isdigit (cpulist[i])) {
vshError( ctl, FALSE, _("cpulist: %s: Invalid format. Expecting digit at position %d (near '%c')."), cpulist, i, cpulist[i]);
virDomainFree (dom);
return FALSE;
}
state = expect_num_or_comma;
break;
case expect_num_or_comma:
if (cpulist[i] == ',')
state = expect_num;
else if (!isdigit (cpulist[i])) {
vshError(ctl, FALSE, _("cpulist: %s: Invalid format. Expecting digit or comma at position %d (near '%c')."), cpulist, i, cpulist[i]);
virDomainFree (dom);
return FALSE;
}
}
}
if (state == expect_num) {
vshError(ctl, FALSE, _("cpulist: %s: Invalid format. Trailing comma at position %d."), cpulist, i);
virDomainFree (dom);
return FALSE;
}
cpumaplen = VIR_CPU_MAPLEN(VIR_NODEINFO_MAXCPUS(nodeinfo));
cpumap = vshCalloc(ctl, 1, cpumaplen);