WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH 12/16] xl: Remove some duplicated boilerplate. (Impro

To: <xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-devel] [PATCH 12/16] xl: Remove some duplicated boilerplate. (Improves logging slightly.)
From: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
Date: Mon, 12 Apr 2010 15:41:42 +0100
Cc: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>, Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
Delivery-date: Mon, 12 Apr 2010 08:09:00 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <1271083306-11126-12-git-send-email-ian.jackson@xxxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <1271083306-11126-1-git-send-email-ian.jackson@xxxxxxxxxxxxx> <1271083306-11126-2-git-send-email-ian.jackson@xxxxxxxxxxxxx> <1271083306-11126-3-git-send-email-ian.jackson@xxxxxxxxxxxxx> <1271083306-11126-4-git-send-email-ian.jackson@xxxxxxxxxxxxx> <1271083306-11126-5-git-send-email-ian.jackson@xxxxxxxxxxxxx> <1271083306-11126-6-git-send-email-ian.jackson@xxxxxxxxxxxxx> <1271083306-11126-7-git-send-email-ian.jackson@xxxxxxxxxxxxx> <1271083306-11126-8-git-send-email-ian.jackson@xxxxxxxxxxxxx> <1271083306-11126-9-git-send-email-ian.jackson@xxxxxxxxxxxxx> <1271083306-11126-10-git-send-email-ian.jackson@xxxxxxxxxxxxx> <1271083306-11126-11-git-send-email-ian.jackson@xxxxxxxxxxxxx> <1271083306-11126-12-git-send-email-ian.jackson@xxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
We remove six lines of boilerplate from the top of each function, and
instead have a single struct libxl_ctx which is initialised once at
the top of main.

Likewise we wrap domain_qualifier_to_domid in a new function
find_domain, which does the error handling, and stores the domid and
the specified name (if applicable).

This reduces the size of xl.c by 7% (!)

As a beneficial side effect, the earlier call to libxl_ctx_set_log in
main makes some lost messages appear.

Signed-off-by: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
---
 tools/libxl/libxl_utils.c |    3 +-
 tools/libxl/libxl_utils.h |    2 +-
 tools/libxl/xl.c          |  255 ++++++++++-----------------------------------
 3 files changed, 60 insertions(+), 200 deletions(-)

diff --git a/tools/libxl/libxl_utils.c b/tools/libxl/libxl_utils.c
index c4dc74c..8fc7d0d 100644
--- a/tools/libxl/libxl_utils.c
+++ b/tools/libxl/libxl_utils.c
@@ -55,7 +55,8 @@ char *libxl_domid_to_name(struct libxl_ctx *ctx, uint32_t 
domid)
     return s;
 }
 
-int libxl_name_to_domid(struct libxl_ctx *ctx, char *name, uint32_t *domid)
+int libxl_name_to_domid(struct libxl_ctx *ctx, const char *name,
+                        uint32_t *domid)
 {
     int i, nb_domains;
     char *domname;
diff --git a/tools/libxl/libxl_utils.h b/tools/libxl/libxl_utils.h
index 4c04c46..5d80181 100644
--- a/tools/libxl/libxl_utils.h
+++ b/tools/libxl/libxl_utils.h
@@ -19,7 +19,7 @@
 #include "libxl.h"
 
 unsigned long libxl_get_required_shadow_memory(unsigned long maxmem_kb, 
unsigned int smp_cpus);
-int libxl_name_to_domid(struct libxl_ctx *ctx, char *name, uint32_t *domid);
+int libxl_name_to_domid(struct libxl_ctx *ctx, const char *name, uint32_t 
*domid);
 char *libxl_domid_to_name(struct libxl_ctx *ctx, uint32_t domid);
 int libxl_get_stubdom_id(struct libxl_ctx *ctx, int guest_domid);
 int libxl_is_stubdom(struct libxl_ctx *ctx, uint32_t domid, uint32_t 
*target_domid);
diff --git a/tools/libxl/xl.c b/tools/libxl/xl.c
index 41dada7..fcb4fc4 100644
--- a/tools/libxl/xl.c
+++ b/tools/libxl/xl.c
@@ -37,7 +37,14 @@
 
 #define UUID_FMT 
"%02hhx%02hhx%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx"
 
-int logfile = 2;
+static int logfile = 2;
+
+/* every libxl action in xl uses this same libxl context */
+static struct libxl_ctx ctx;
+
+/* when we operate on a domain, it is this one: */
+static uint32_t domid;
+static const char *common_domname;
 
 void log_callback(void *userdata, int loglevel, const char *file, int line, 
const char *func, char *s)
 {
@@ -47,7 +54,8 @@ void log_callback(void *userdata, int loglevel, const char 
*file, int line, cons
     write(logfile, str, strlen(str));
 }
 
-static int domain_qualifier_to_domid(struct libxl_ctx *ctx, char *p, uint32_t 
*domid)
+static int domain_qualifier_to_domid(const char *p, uint32_t *domid_r,
+                                     int *was_name_r)
 {
     int i, alldigit;
 
@@ -60,12 +68,26 @@ static int domain_qualifier_to_domid(struct libxl_ctx *ctx, 
char *p, uint32_t *d
     }
 
     if (i > 0 && alldigit) {
-        *domid = strtoul(p, NULL, 10);
+        *domid_r = strtoul(p, NULL, 10);
+        if (was_name_r) *was_name_r = 0;
         return 0;
     } else {
         /* check here if it's a uuid and do proper conversion */
     }
-    return libxl_name_to_domid(ctx, p, domid);
+    if (was_name_r) *was_name_r = 1;
+    return libxl_name_to_domid(&ctx, p, domid_r);
+}
+
+static void find_domain(const char *p)
+{
+    int rc, was_name;
+    
+    rc = domain_qualifier_to_domid(p, &domid, &was_name);
+    if (rc) {
+        fprintf(stderr, "%s is an invalid domain identifier (rc=%d)\n", p, rc);
+        exit(2);
+    }
+    common_domname = was_name ? p : 0;
 }
 
 #define LOG(_f, _a...)   dolog(__FILE__, __LINE__, __func__, _f "\n", ##_a)
@@ -681,8 +703,6 @@ skip_pci:
 
 static void create_domain(int debug, int daemonize, const char *config_file, 
const char *restore_file, int paused)
 {
-    struct libxl_ctx ctx;
-    uint32_t domid;
     libxl_domain_create_info info1;
     libxl_domain_build_info info2;
     libxl_domain_build_state state;
@@ -709,13 +729,6 @@ static void create_domain(int debug, int daemonize, const 
char *config_file, con
 start:
     domid = 0;
 
-    if (libxl_ctx_init(&ctx, LIBXL_VERSION)) {
-        fprintf(stderr, "cannot init xl context\n");
-        return;
-    }
-
-    libxl_ctx_set_log(&ctx, log_callback, NULL);
-
     ret = libxl_domain_make(&ctx, &info1, &domid);
     if (ret) {
         fprintf(stderr, "cannot make domain: %d\n", ret);
@@ -834,7 +847,6 @@ start:
                             libxl_free_waiter(w2);
                             free(w1);
                             free(w2);
-                            libxl_ctx_free(&ctx);
                             LOG("Done. Rebooting now");
                             goto start;
                         }
@@ -954,21 +966,11 @@ static void help(char *command)
 
 void set_memory_target(char *p, char *mem)
 {
-    struct libxl_ctx ctx;
-    uint32_t domid;
-    uint32_t memorykb;
     char *endptr;
+    uint32_t memorykb;
 
-    if (libxl_ctx_init(&ctx, LIBXL_VERSION)) {
-        fprintf(stderr, "cannot init xl context\n");
-        return;
-    }
-    libxl_ctx_set_log(&ctx, log_callback, NULL);
+    find_domain(p);
 
-    if (domain_qualifier_to_domid(&ctx, p, &domid) < 0) {
-        fprintf(stderr, "%s is an invalid domain identifier\n", p);
-        exit(2);
-    }
     memorykb = strtoul(mem, &endptr, 10);
     if (*endptr != '\0') {
         fprintf(stderr, "invalid memory size: %s\n", mem);
@@ -1007,39 +1009,16 @@ int main_memset(int argc, char **argv)
 
 void console(char *p, int cons_num)
 {
-    struct libxl_ctx ctx;
-    uint32_t domid;
-
-    if (libxl_ctx_init(&ctx, LIBXL_VERSION)) {
-        fprintf(stderr, "cannot init xl context\n");
-        return;
-    }
-    libxl_ctx_set_log(&ctx, log_callback, NULL);
-
-    if (domain_qualifier_to_domid(&ctx, p, &domid) < 0) {
-        fprintf(stderr, "%s is an invalid domain identifier\n", p);
-        exit(2);
-    }
+    find_domain(p);
     libxl_console_attach(&ctx, domid, cons_num);
 }
 
 void cd_insert(char *dom, char *virtdev, char *phys)
 {
-    struct libxl_ctx ctx;
-    uint32_t domid;
     libxl_device_disk disk;
     char *p;
 
-    if (libxl_ctx_init(&ctx, LIBXL_VERSION)) {
-        fprintf(stderr, "cannot init xl context\n");
-        return;
-    }
-    libxl_ctx_set_log(&ctx, log_callback, NULL);
-
-    if (domain_qualifier_to_domid(&ctx, dom, &domid) < 0) {
-        fprintf(stderr, "%s is an invalid domain identifier\n", dom);
-        exit(2);
-    }
+    find_domain(dom);
 
     disk.backend_domid = 0;
     disk.domid = domid;
@@ -1161,21 +1140,11 @@ int main_console(int argc, char **argv)
 
 void pcilist(char *dom)
 {
-    struct libxl_ctx ctx;
-    uint32_t domid;
     libxl_device_pci *pcidevs;
     int num, i;
 
-    if (libxl_ctx_init(&ctx, LIBXL_VERSION)) {
-        fprintf(stderr, "cannot init xl context\n");
-        return;
-    }
-    libxl_ctx_set_log(&ctx, log_callback, NULL);
+    find_domain(dom);
 
-    if (domain_qualifier_to_domid(&ctx, dom, &domid) < 0) {
-        fprintf(stderr, "%s is an invalid domain identifier\n", dom);
-        exit(2);
-    }
     pcidevs = libxl_device_pci_list(&ctx, domid, &num);
     if (!num)
         return;
@@ -1214,21 +1183,11 @@ int main_pcilist(int argc, char **argv)
 
 void pcidetach(char *dom, char *bdf)
 {
-    struct libxl_ctx ctx;
-    uint32_t domid;
     libxl_device_pci pcidev;
     unsigned int domain, bus, dev, func;
 
-    if (libxl_ctx_init(&ctx, LIBXL_VERSION)) {
-        fprintf(stderr, "cannot init xl context\n");
-        return;
-    }
-    libxl_ctx_set_log(&ctx, log_callback, NULL);
+    find_domain(dom);
 
-    if (domain_qualifier_to_domid(&ctx, dom, &domid) < 0) {
-        fprintf(stderr, "%s is an invalid domain identifier\n", dom);
-        exit(2);
-    }
     memset(&pcidev, 0x00, sizeof(pcidev));
     sscanf(bdf, PCI_BDF, &domain, &bus, &dev, &func);
     libxl_device_pci_init(&pcidev, domain, bus, dev, func, 0);
@@ -1263,21 +1222,11 @@ int main_pcidetach(int argc, char **argv)
 }
 void pciattach(char *dom, char *bdf, char *vs)
 {
-    struct libxl_ctx ctx;
-    uint32_t domid;
     libxl_device_pci pcidev;
     unsigned int domain, bus, dev, func;
 
-    if (libxl_ctx_init(&ctx, LIBXL_VERSION)) {
-        fprintf(stderr, "cannot init xl context\n");
-        return;
-    }
-    libxl_ctx_set_log(&ctx, log_callback, NULL);
+    find_domain(dom);
 
-    if (domain_qualifier_to_domid(&ctx, dom, &domid) < 0) {
-        fprintf(stderr, "%s is an invalid domain identifier\n", dom);
-        exit(2);
-    }
     memset(&pcidev, 0x00, sizeof(pcidev));
     sscanf(bdf, PCI_BDF, &domain, &bus, &dev, &func);
     libxl_device_pci_init(&pcidev, domain, bus, dev, func, 0);
@@ -1316,70 +1265,27 @@ int main_pciattach(int argc, char **argv)
 
 void pause_domain(char *p)
 {
-    struct libxl_ctx ctx;
-    uint32_t domid;
-
-    if (libxl_ctx_init(&ctx, LIBXL_VERSION)) {
-        fprintf(stderr, "cannot init xl context\n");
-        return;
-    }
-    libxl_ctx_set_log(&ctx, log_callback, NULL);
-
-    if (domain_qualifier_to_domid(&ctx, p, &domid) < 0) {
-        fprintf(stderr, "%s is an invalid domain identifier\n", p);
-        exit(2);
-    }
+    find_domain(p);
     libxl_domain_pause(&ctx, domid);
 }
 
 void unpause_domain(char *p)
 {
-    struct libxl_ctx ctx;
-    uint32_t domid;
-
-    if (libxl_ctx_init(&ctx, LIBXL_VERSION)) {
-        fprintf(stderr, "cannot init xl context\n");
-        return;
-    }
-    libxl_ctx_set_log(&ctx, log_callback, NULL);
-
-    if (domain_qualifier_to_domid(&ctx, p, &domid) < 0) {
-        fprintf(stderr, "%s is an invalid domain identifier\n", p);
-        exit(2);
-    }
+    find_domain(p);
     libxl_domain_unpause(&ctx, domid);
 }
 
 void destroy_domain(char *p)
 {
-    struct libxl_ctx ctx;
-    uint32_t domid;
-
-    if (libxl_ctx_init(&ctx, LIBXL_VERSION)) {
-        fprintf(stderr, "cannot init xl context\n");
-        return;
-    }
-    libxl_ctx_set_log(&ctx, log_callback, NULL);
-
-    if (domain_qualifier_to_domid(&ctx, p, &domid) < 0) {
-        fprintf(stderr, "%s is an invalid domain identifier\n", p);
-        exit(2);
-    }
+    find_domain(p);
     libxl_domain_destroy(&ctx, domid, 0);
 }
 
 void list_domains(int verbose)
 {
-    struct libxl_ctx ctx;
     struct libxl_dominfo *info;
     int nb_domain, i;
 
-    if (libxl_ctx_init(&ctx, LIBXL_VERSION)) {
-        fprintf(stderr, "cannot init xl context\n");
-        return;
-    }
-    libxl_ctx_set_log(&ctx, log_callback, NULL);
-
     info = libxl_list_domain(&ctx, &nb_domain);
 
     if (info < 0) {
@@ -1408,16 +1314,9 @@ void list_domains(int verbose)
 
 void list_vm(void)
 {
-    struct libxl_ctx ctx;
     struct libxl_vminfo *info;
     int nb_vm, i;
 
-    if (libxl_ctx_init(&ctx, LIBXL_VERSION)) {
-        fprintf(stderr, "cannot init xl context\n");
-        return;
-    }
-    libxl_ctx_set_log(&ctx, log_callback, NULL);
-
     info = libxl_list_vm(&ctx, &nb_vm);
 
     if (info < 0) {
@@ -1438,20 +1337,9 @@ void list_vm(void)
 
 int save_domain(char *p, char *filename, int checkpoint)
 {
-    struct libxl_ctx ctx;
-    uint32_t domid;
     int fd;
 
-    if (libxl_ctx_init(&ctx, LIBXL_VERSION)) {
-        fprintf(stderr, "cannot init xl context\n");
-        exit(2);
-    }
-    libxl_ctx_set_log(&ctx, log_callback, NULL);
-
-    if (domain_qualifier_to_domid(&ctx, p, &domid) < 0) {
-        fprintf(stderr, "%s is an invalid domain identifier\n", p);
-        exit(2);
-    }
+    find_domain(p);
     fd = open(filename, O_WRONLY|O_CREAT|O_TRUNC, 0644);
     if (fd < 0) {
         fprintf(stderr, "Failed to open temp file %s for writing\n", filename);
@@ -1693,17 +1581,9 @@ int main_create(int argc, char **argv)
 
 void button_press(char *p, char *b)
 {
-    struct libxl_ctx ctx;
-    uint32_t domid;
     libxl_button button;
 
-    libxl_ctx_init(&ctx, LIBXL_VERSION);
-    libxl_ctx_set_log(&ctx, log_callback, NULL);
-
-    if (domain_qualifier_to_domid(&ctx, p, &domid) < 0) {
-        fprintf(stderr, "%s is an invalid domain identifier\n", p);
-        exit(2);
-    }
+    find_domain(p);
 
     if (!strcmp(b, "power")) {
         button = POWER_BUTTON;
@@ -1745,7 +1625,7 @@ int main_button_press(int argc, char **argv)
     exit(0);
 }
 
-static void print_vcpuinfo(struct libxl_ctx *ctx, uint32_t domid,
+static void print_vcpuinfo(uint32_t tdomid,
                            const struct libxl_vcpuinfo *vcpuinfo,
                            uint32_t nr_cpus)
 {
@@ -1755,7 +1635,7 @@ static void print_vcpuinfo(struct libxl_ctx *ctx, 
uint32_t domid,
 
     /*      NAME  ID  VCPU */
     printf("%-32s %5u %5u",
-           libxl_domid_to_name(ctx, domid), domid, vcpuinfo->vcpuid);
+           libxl_domid_to_name(&ctx, tdomid), tdomid, vcpuinfo->vcpuid);
     if (!vcpuinfo->online) {
         /*      CPU STA */
         printf("%5c %3c%cp ", '-', '-', '-');
@@ -1813,19 +1693,11 @@ static void print_vcpuinfo(struct libxl_ctx *ctx, 
uint32_t domid,
 
 void vcpulist(int argc, char **argv)
 {
-    struct libxl_ctx ctx;
     struct libxl_dominfo *dominfo;
-    uint32_t domid;
     struct libxl_vcpuinfo *vcpuinfo;
     struct libxl_physinfo physinfo;
     int nb_vcpu, nb_domain, cpusize;
 
-    if (libxl_ctx_init(&ctx, LIBXL_VERSION)) {
-        fprintf(stderr, "cannot init xl context\n");
-        return;
-    }
-    libxl_ctx_set_log(&ctx, log_callback, NULL);
-
     if (libxl_get_physinfo(&ctx, &physinfo) != 0) {
         fprintf(stderr, "libxl_physinfo failed.\n");
         goto vcpulist_out;
@@ -1843,12 +1715,12 @@ void vcpulist(int argc, char **argv)
                 goto vcpulist_out;
             }
             for (; nb_vcpu > 0; --nb_vcpu, ++vcpuinfo) {
-                print_vcpuinfo(&ctx, dominfo->domid, vcpuinfo, 
physinfo.nr_cpus);
+                print_vcpuinfo(dominfo->domid, vcpuinfo, physinfo.nr_cpus);
             }
         }
     } else {
         for (; argc > 0; ++argv, --argc) {
-            if (domain_qualifier_to_domid(&ctx, *argv, &domid) < 0) {
+            if (domain_qualifier_to_domid(*argv, &domid, 0) < 0) {
                 fprintf(stderr, "%s is an invalid domain identifier\n", *argv);
             }
             if (!(vcpuinfo = libxl_list_vcpu(&ctx, domid, &nb_vcpu, 
&cpusize))) {
@@ -1856,12 +1728,12 @@ void vcpulist(int argc, char **argv)
                 goto vcpulist_out;
             }
             for (; nb_vcpu > 0; --nb_vcpu, ++vcpuinfo) {
-                print_vcpuinfo(&ctx, domid, vcpuinfo, physinfo.nr_cpus);
+                print_vcpuinfo(domid, vcpuinfo, physinfo.nr_cpus);
             }
         }
     }
   vcpulist_out:
-    libxl_ctx_free(&ctx);
+    ;
 }
 
 void main_vcpulist(int argc, char **argv)
@@ -1885,12 +1757,11 @@ void main_vcpulist(int argc, char **argv)
 
 void vcpupin(char *d, const char *vcpu, char *cpu)
 {
-    struct libxl_ctx ctx;
     struct libxl_vcpuinfo *vcpuinfo;
     struct libxl_physinfo physinfo;
     uint64_t *cpumap = NULL;
 
-    uint32_t domid, vcpuid, cpuida, cpuidb;
+    uint32_t vcpuid, cpuida, cpuidb;
     char *endptr, *toka, *tokb;
     int i, nb_vcpu, cpusize;
 
@@ -1903,16 +1774,8 @@ void vcpupin(char *d, const char *vcpu, char *cpu)
         vcpuid = -1;
     }
 
-    if (libxl_ctx_init(&ctx, LIBXL_VERSION)) {
-        fprintf(stderr, "cannot init xl context\n");
-        return;
-    }
-    libxl_ctx_set_log(&ctx, log_callback, NULL);
+    find_domain(d);
 
-    if (domain_qualifier_to_domid(&ctx, d, &domid) < 0) {
-        fprintf(stderr, "%s is an invalid domain identifier\n", d);
-        goto vcpupin_out1;
-    }
     if (libxl_get_physinfo(&ctx, &physinfo) != 0) {
         fprintf(stderr, "libxl_get_physinfo failed.\n");
         goto vcpupin_out1;
@@ -1970,7 +1833,7 @@ void vcpupin(char *d, const char *vcpu, char *cpu)
   vcpupin_out1:
     free(cpumap);
   vcpupin_out:
-    libxl_ctx_free(&ctx);
+    ;
 }
 
 int main_vcpupin(int argc, char **argv)
@@ -1998,9 +1861,7 @@ int main_vcpupin(int argc, char **argv)
 
 void vcpuset(char *d, char* nr_vcpus)
 {
-    struct libxl_ctx ctx;
     char *endptr;
-    uint32_t domid;
     unsigned int max_vcpus;
 
     max_vcpus = strtoul(nr_vcpus, &endptr, 10);
@@ -2009,22 +1870,11 @@ void vcpuset(char *d, char* nr_vcpus)
         return;
     }
 
-    if (libxl_ctx_init(&ctx, LIBXL_VERSION)) {
-        fprintf(stderr, "cannot init xl context\n");
-        return;
-    }
-    libxl_ctx_set_log(&ctx, log_callback, NULL);
+    find_domain(d);
 
-    if (domain_qualifier_to_domid(&ctx, d, &domid) < 0) {
-        fprintf(stderr, "%s is an invalid domain identifier\n", d);
-        goto vcpuset_out;
-    }
     if (libxl_set_vcpucount(&ctx, domid, max_vcpus) == ERROR_INVAL) {
         fprintf(stderr, "Error: Cannot set vcpus greater than max vcpus on 
running domain or lesser than 1.\n");
     }
-
-  vcpuset_out:
-    libxl_ctx_free(&ctx);
 }
 
 int main_vcpuset(int argc, char **argv)
@@ -2057,6 +1907,15 @@ int main(int argc, char **argv)
         exit(1);
     }
 
+    if (libxl_ctx_init(&ctx, LIBXL_VERSION)) {
+        fprintf(stderr, "cannot init xl context\n");
+        exit(1);
+    }
+    if (libxl_ctx_set_log(&ctx, log_callback, NULL)) {
+        fprintf(stderr, "cannot set xl log callback\n");
+        exit(-ERROR_FAIL);
+    }
+
     srand(time(0));
 
     if (!strcmp(argv[1], "create")) {
-- 
1.5.6.5


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