[libvirt] [PATCH] Use unsigned long in cmdSetmem.

Chris Lalancette clalance at redhat.com
Thu Jul 8 15:39:07 UTC 2010


The virsh command "setmem" takes as input a number that
should represent an unsigned long number of kilobytes.  Fix
cmdSetmem to properly parse this as an unsigned long instead
of an int.

Signed-off-by: Chris Lalancette <clalance at redhat.com>
---
 tools/virsh.c |   30 ++++++++++++++++++++++++++----
 1 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/tools/virsh.c b/tools/virsh.c
index 551e97b..63816dc 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -223,6 +223,8 @@ static int vshCmddefHelp(vshControl *ctl, const char *name);
 
 static vshCmdOpt *vshCommandOpt(const vshCmd *cmd, const char *name);
 static int vshCommandOptInt(const vshCmd *cmd, const char *name, int *found);
+static unsigned long vshCommandOptUL(const vshCmd *cmd, const char *name,
+                                     int *found);
 static char *vshCommandOptString(const vshCmd *cmd, const char *name,
                                  int *found);
 static long long vshCommandOptLongLong(const vshCmd *cmd, const char *name,
@@ -2534,7 +2536,7 @@ cmdSetmem(vshControl *ctl, const vshCmd *cmd)
 {
     virDomainPtr dom;
     virDomainInfo info;
-    int kilobytes;
+    unsigned long kilobytes;
     int ret = TRUE;
 
     if (!vshConnectionUsability(ctl, ctl->conn))
@@ -2543,10 +2545,10 @@ cmdSetmem(vshControl *ctl, const vshCmd *cmd)
     if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
         return FALSE;
 
-    kilobytes = vshCommandOptInt(cmd, "kilobytes", &kilobytes);
+    kilobytes = vshCommandOptUL(cmd, "kilobytes", NULL);
     if (kilobytes <= 0) {
         virDomainFree(dom);
-        vshError(ctl, _("Invalid value of %d for memory size"), kilobytes);
+        vshError(ctl, _("Invalid value of %lu for memory size"), kilobytes);
         return FALSE;
     }
 
@@ -2558,7 +2560,7 @@ cmdSetmem(vshControl *ctl, const vshCmd *cmd)
 
     if (kilobytes > info.maxMem) {
         virDomainFree(dom);
-        vshError(ctl, _("Requested memory size %d kb is larger than maximum of %lu kb"),
+        vshError(ctl, _("Requested memory size %lu kb is larger than maximum of %lu kb"),
                  kilobytes, info.maxMem);
         return FALSE;
     }
@@ -9628,6 +9630,26 @@ vshCommandOptInt(const vshCmd *cmd, const char *name, int *found)
     return res;
 }
 
+static unsigned long
+vshCommandOptUL(const vshCmd *cmd, const char *name, int *found)
+{
+    vshCmdOpt *arg = vshCommandOpt(cmd, name);
+    unsigned long res = 0;
+    int num_found = FALSE;
+    char *end_p = NULL;
+
+    if ((arg != NULL) && (arg->data != NULL)) {
+        res = strtoul(arg->data, &end_p, 10);
+        if ((arg->data == end_p) || (*end_p!= 0))
+            num_found = FALSE;
+        else
+            num_found = TRUE;
+    }
+    if (found)
+        *found = num_found;
+    return res;
+}
+
 /*
  * Returns option as STRING
  */
-- 
1.7.1.1




More information about the libvir-list mailing list