
On Mon, Jun 18, 2007 at 05:20:13PM +0100, Richard W.M. Jones wrote:
Richard W.M. Jones wrote:
Index: src/virsh.c =================================================================== RCS file: /data/cvs/libvirt/src/virsh.c,v retrieving revision 1.85 diff -u -r1.85 virsh.c --- src/virsh.c 18 Jun 2007 08:33:08 -0000 1.85 +++ src/virsh.c 18 Jun 2007 11:00:59 -0000 @@ -1505,7 +1505,7 @@ * "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} @@ -1530,6 +1530,8 @@ 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; @@ -1563,6 +1565,42 @@ 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);
I want to commit this one if we're all happy with it ...?
Yes please :-) Our documentation for virsh is lagging behind I'm afraid, and the help command doesn't really replace a complete man page or a getting started kind of tutorial. Daniel -- Red Hat Virtualization group http://redhat.com/virtualization/ Daniel Veillard | virtualization library http://libvirt.org/ veillard@redhat.com | libxml GNOME XML XSLT toolkit http://xmlsoft.org/ http://veillard.com/ | Rpmfind RPM search engine http://rpmfind.net/