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