[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] libxl: Compilation and other small fixes



# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1274253646 -3600
# Node ID eb4ecc037b7a53647f0ac89c7067d11ea622ab00
# Parent  165116a220d9912c29a56aaa32c1a6652cdd1988
libxl: Compilation and other small fixes

* Some of the library functions such as fscanf, system, and asprintf
are declared with warn_unused_result (ubuntu server 9.10), causing
compilation errors in libxl.
* When using asprintf, the caller is responsible for freeing the
memory.
* memset takes wrong size argument in one of the places (caught by
a builtin gcc check).

Signed-off-by: Dulloor Rao <dulloor@xxxxxxxxx>
---
 tools/libxl/libxl.c      |   15 ++++++-----
 tools/libxl/xl_cmdimpl.c |   59 +++++++++++++++++++++++++++++++----------------
 2 files changed, 47 insertions(+), 27 deletions(-)

diff -r 165116a220d9 -r eb4ecc037b7a tools/libxl/libxl.c
--- a/tools/libxl/libxl.c       Wed May 19 08:18:51 2010 +0100
+++ b/tools/libxl/libxl.c       Wed May 19 08:20:46 2010 +0100
@@ -1262,7 +1262,8 @@ static char *get_blktap2_device(struct l
 
     
     while (!feof(f)) {
-        fscanf(f, "%d %s", &devnum, buf);
+        if (fscanf(f, "%d %s", &devnum, buf) != 2)
+            continue;
         p = strchr(buf, ':');
         if (p == NULL)
             continue;
@@ -2276,7 +2277,8 @@ int libxl_device_pci_add(struct libxl_ct
             return -1;
         }
         for (i = 0; i < PROC_PCI_NUM_RESOURCES; i++) {
-            fscanf(f, "0x%x 0x%x 0x%x", &start, &end, &flags);
+            if (fscanf(f, "0x%x 0x%x 0x%x", &start, &end, &flags) != 3)
+                continue;
             size = end - start + 1;
             if (start) {
                 if (flags & PCI_BAR_IO) {
@@ -2299,8 +2301,7 @@ int libxl_device_pci_add(struct libxl_ct
             XL_LOG_ERRNO(ctx, XL_LOG_ERROR, "Couldn't open %s", sysfs_path);
             goto out;
         }
-        fscanf(f, "%u", &irq);
-        if (irq) {
+        if ((fscanf(f, "%u", &irq) == 1) && irq) {
             rc = xc_physdev_map_pirq(ctx->xch, domid, irq, &irq);
             if (rc < 0) {
                 XL_LOG_ERRNOVAL(ctx, XL_LOG_ERROR, rc, "Error: 
xc_physdev_map_pirq irq=%d", irq);
@@ -2364,7 +2365,8 @@ int libxl_device_pci_remove(struct libxl
             goto skip1;
         }
         for (i = 0; i < PROC_PCI_NUM_RESOURCES; i++) {
-            fscanf(f, "0x%x 0x%x 0x%x\n", &start, &end, &flags);
+            if (fscanf(f, "0x%x 0x%x 0x%x\n", &start, &end, &flags) != 3)
+                continue;
             size = end - start + 1;
             if (start) {
                 if (flags & PCI_BAR_IO) {
@@ -2388,8 +2390,7 @@ skip1:
             XL_LOG_ERRNO(ctx, XL_LOG_ERROR, "Couldn't open %s", sysfs_path);
             goto out;
         }
-        fscanf(f, "%u", &irq);
-        if (irq) {
+        if ((fscanf(f, "%u", &irq) == 1) && irq) {
             rc = xc_physdev_unmap_pirq(ctx->xch, domid, irq);
             if (rc < 0) {
                 XL_LOG_ERRNOVAL(ctx, XL_LOG_ERROR, rc, "xc_physdev_map_pirq 
irq=%d", irq);
diff -r 165116a220d9 -r eb4ecc037b7a tools/libxl/xl_cmdimpl.c
--- a/tools/libxl/xl_cmdimpl.c  Wed May 19 08:18:51 2010 +0100
+++ b/tools/libxl/xl_cmdimpl.c  Wed May 19 08:20:46 2010 +0100
@@ -1141,7 +1141,7 @@ start:
         xc_domaininfo_t info;
         libxl_event event;
         libxl_device_disk disk;
-        memset(&info, 0x00, sizeof(xc_dominfo_t));
+        memset(&info, 0x00, sizeof(xc_domaininfo_t));
 
         FD_ZERO(&rfds);
         FD_SET(fd, &rfds);
@@ -3227,9 +3227,7 @@ int main_top(int argc, char **argv)
         }
     }
 
-    system("xentop");
-
-    exit(0);
+    exit(system("xentop"));
 }
 
 int main_networkattach(int argc, char **argv)
@@ -3560,6 +3558,7 @@ static char *uptime_to_string(unsigned l
 {
     int sec, min, hour, day;
     char *time_string;
+    int ret;
 
     day = (int)(time / 86400);
     time -= (day * 86400);
@@ -3571,19 +3570,21 @@ static char *uptime_to_string(unsigned l
 
     if (short_mode)
         if (day > 1)
-            asprintf(&time_string, "%d days, %2d:%02d", day, hour, min);
+            ret = asprintf(&time_string, "%d days, %2d:%02d", day, hour, min);
         else if (day == 1)
-            asprintf(&time_string, "%d day, %2d:%02d", day, hour, min);
+            ret = asprintf(&time_string, "%d day, %2d:%02d", day, hour, min);
         else
-            asprintf(&time_string, "%2d:%02d", hour, min);
+            ret = asprintf(&time_string, "%2d:%02d", hour, min);
     else
         if (day > 1)
-            asprintf(&time_string, "%d days, %2d:%02d:%02d", day, hour, min, 
sec);
+            ret = asprintf(&time_string, "%d days, %2d:%02d:%02d", day, hour, 
min, sec);
         else if (day == 1)
-            asprintf(&time_string, "%d day, %2d:%02d:%02d", day, hour, min, 
sec);
+            ret = asprintf(&time_string, "%d day, %2d:%02d:%02d", day, hour, 
min, sec);
         else
-            asprintf(&time_string, "%2d:%02d:%02d", hour, min, sec);
-
+            ret = asprintf(&time_string, "%2d:%02d:%02d", hour, min, sec);
+
+    if (ret < 0)
+        return NULL;
     return time_string;
 }
 
@@ -3609,8 +3610,9 @@ static void print_dom0_uptime(int short_
     int fd;
     char buf[512];
     uint32_t uptime = 0;
-
-    fd = open("/proc/uptime", 'r');
+    char *uptime_str = 0;
+
+    fd = open("/proc/uptime", O_RDONLY);
     if (fd == -1)
         goto err;
 
@@ -3624,12 +3626,20 @@ static void print_dom0_uptime(int short_
     uptime = strtoul(buf, NULL, 10);
 
     if (short_mode)
+    {
+        uptime_str = uptime_to_string(uptime, 1);
         printf(" %s up %s, %s (%d)\n", current_time_to_string(now),
-               uptime_to_string(uptime, 1), libxl_domid_to_name(&ctx, 0), 0);
+               uptime_str, libxl_domid_to_name(&ctx, 0), 0);
+    }
     else
+    {
+        uptime_str = uptime_to_string(uptime, 0);
         printf("%-33s %4d %s\n", libxl_domid_to_name(&ctx, 0),
-               0, uptime_to_string(uptime, 0));
-
+               0, uptime_str);
+    }
+
+    if (uptime_str)
+        free(uptime_str);
     return;
 err:
     fprintf(stderr, "Can not get Dom0 uptime.\n");
@@ -3640,19 +3650,28 @@ static void print_domU_uptime(uint32_t d
 {
     uint32_t s_time = 0;
     uint32_t uptime = 0;
+    char *uptime_str = 0;
 
     s_time = libxl_vm_get_start_time(&ctx, domuid);
     if (s_time == -1)
         return;
     uptime = now - s_time;
     if (short_mode)
+    {
+        uptime_str = uptime_to_string(uptime, 1);
         printf(" %s up %s, %s (%d)\n", current_time_to_string(now),
-               uptime_to_string(uptime, 1),
-               libxl_domid_to_name(&ctx, domuid),
-               domuid);
+               uptime_str, libxl_domid_to_name(&ctx, domuid), domuid);
+    }
     else
+    {
+        uptime_str = uptime_to_string(uptime, 0);
         printf("%-33s %4d %s\n", libxl_domid_to_name(&ctx, domuid),
-               domuid, uptime_to_string(uptime, 0));
+               domuid, uptime_str);
+    }
+
+    if (uptime_str)
+        free(uptime_str);
+    return;
 }
 
 static void print_uptime(int short_mode, uint32_t doms[], int nb_doms)

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.