[Libvir] [PATCH] Fix the check of <cpumap> in virsh vcpupin

Daniel Veillard veillard at redhat.com
Tue Jun 19 09:25:15 UTC 2007


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 at redhat.com  | libxml GNOME XML XSLT toolkit  http://xmlsoft.org/
http://veillard.com/ | Rpmfind RPM search engine  http://rpmfind.net/




More information about the libvir-list mailing list