tools/libxl: fix "xl console" for primary console
authorIan Campbell <ian.campbell@citrix.com>
Wed, 18 Aug 2010 16:09:59 +0000 (17:09 +0100)
committerIan Campbell <ian.campbell@citrix.com>
Wed, 18 Aug 2010 16:09:59 +0000 (17:09 +0100)
libxl_console_constype is an enum and can therefore be unsigned so
using -1 as a sentinel for unset in main_console fails to work as
expected.

Arrange for all valid enum values to be > 0 and use 0 as the sentinal
instead.

If the user does not request a specific type then always use the
primary console since using "-n" but not "-t" is not meaningful as we
do not know which type to request.

Also make libxl_console_exec reject invalid values of type.

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
tools/libxl/libxl.c
tools/libxl/libxl.h
tools/libxl/xl_cmdimpl.c

index c95272d4327fe3fb3eead1553a7904969930f92f..c31c659d09c7c954ea12287a524325de661f724e 100644 (file)
@@ -959,12 +959,20 @@ int libxl_console_exec(libxl_ctx *ctx, uint32_t domid, int cons_num, libxl_conso
     char *cons_num_s = libxl_sprintf(&gc, "%d", cons_num);
     char *cons_type_s;
 
-    if (type == LIBXL_CONSTYPE_PV)
+    switch (type) {
+    case LIBXL_CONSTYPE_PV:
         cons_type_s = "pv";
-    else
+        break;
+    case LIBXL_CONSTYPE_SERIAL:
         cons_type_s = "serial";
+        break;
+    default:
+        goto out;
+    }
 
     execl(p, p, domid_s, "--num", cons_num_s, "--type", cons_type_s, (void *)NULL);
+
+out:
     libxl_free_all(&gc);
     return ERROR_FAIL;
 }
index c757a9f09d7feb7ccf1ede5454cfebda7ac57223..d9de4f67a8baf9b1be9eccee711d235759a18164 100644 (file)
@@ -155,7 +155,7 @@ typedef enum {
 } libxl_qemu_machine_type;
 
 typedef enum {
-    LIBXL_CONSTYPE_SERIAL,
+    LIBXL_CONSTYPE_SERIAL = 1,
     LIBXL_CONSTYPE_PV,
 } libxl_console_constype;
 
index 323dd04803fbba46a92b20bbe0f0bbe1d41076f0..b5a1cddb47949112356b3bee49633f6987000edb 100644 (file)
@@ -1851,7 +1851,7 @@ int main_cd_insert(int argc, char **argv)
 int main_console(int argc, char **argv)
 {
     int opt = 0, num = 0;
-    libxl_console_constype type = -1;
+    libxl_console_constype type = 0;
 
     while ((opt = getopt(argc, argv, "hn:t:")) != -1) {
         switch (opt) {
@@ -1882,7 +1882,7 @@ int main_console(int argc, char **argv)
     }
 
     find_domain(argv[optind]);
-    if (type <= 0 && num == 0)
+    if (!type)
         libxl_primary_console_exec(&ctx, domid);
     else
         libxl_console_exec(&ctx, domid, num, type);