From 175e1711a67347f35b0ea5674b8b23325a6b5e5a Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Wed, 10 Oct 2007 17:55:38 +0000 Subject: [PATCH] Fixed processing of vncdisplay/vncused params in XM config files --- ChangeLog | 5 +++++ src/xm_internal.c | 33 +++++++++++++++++++++------------ 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index 65c20530a3..ea1a17963b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Wed Oct 10 13:48:53 EST 2007 Daniel P. Berrange + + * src/xm_internal.c: Fixed procesing of vncunused, and vncdisplay + parameters in XM style config files for framebuffer config. + Wed Oct 10 13:13:53 EST 2007 Daniel P. Berrange * src/xm_internal.c: Fix XML -> XM config file conversion to diff --git a/src/xm_internal.c b/src/xm_internal.c index b0dc0ad3c1..288359da09 100644 --- a/src/xm_internal.c +++ b/src/xm_internal.c @@ -924,7 +924,8 @@ char *xenXMDomainFormatXML(virConnectPtr conn, virConfPtr conf) { } if (xenXMConfigGetInt(conf, "sdl", &val) == 0 && val) sdl = 1; - } else { /* New PV guests use this format */ + } + if (!hvm && !sdl && !vnc) { /* New PV guests use this format */ list = virConfGetValue(conf, "vfb"); if (list && list->type == VIR_CONF_LIST && list->list && list->list->type == VIR_CONF_STRING && @@ -951,6 +952,8 @@ char *xenXMDomainFormatXML(virConnectPtr conn, virConfPtr conf) { sdl = 1; } else if (!strncmp(key, "type=vnc", 8)) { vnc = 1; + } else if (!strncmp(key, "vncunused=", 10)) { + vncunused = strtol(key+10, NULL, 10); } else if (!strncmp(key, "vnclisten=", 10)) { vnclisten = key + 10; } else if (!strncmp(key, "vncpasswd=", 10)) { @@ -958,11 +961,7 @@ char *xenXMDomainFormatXML(virConnectPtr conn, virConfPtr conf) { } else if (!strncmp(key, "keymap=", 7)) { keymap = key + 7; } else if (!strncmp(key, "vncdisplay=", 11)) { - int port = strtol(key+11, NULL, 10); - if (port == -1) - vncunused = 1; - else - port = port - 5900; + vncdisplay = strtol(key+11, NULL, 10); } while (nextkey && (nextkey[0] == ',' || @@ -1943,11 +1942,18 @@ virConfPtr xenXMParseXMLToConfig(virConnectPtr conn, const char *xml) { "cannot set the keymap parameter") < 0) goto error; - /* XXX vncdisplay */ - /* - if (xenXMConfigSetIntFromXPath(conn, conf, ctxt, "vncdisplay", "string(int(/domain/devices/graphics[@type='vnc']/@vncport) - 5900))", 0, 0) < 0) - goto error; - */ + obj = xmlXPathEval(BAD_CAST "string(/domain/devices/graphics[@type='vnc']/@port)", ctxt); + if ((obj != NULL) && (obj->type == XPATH_STRING) && + (obj->stringval != NULL)) { + int port = strtol((const char *)obj->stringval, NULL, 10); + if (port != -1) { + char portstr[50]; + snprintf(portstr, sizeof(portstr), "%d", port-5900); + if (xenXMConfigSetString(conf, "vncdisplay", portstr) < 0) + goto error; + } + } + xmlXPathFreeObject(obj); } else { virConfValuePtr vfb; obj = xmlXPathEval(BAD_CAST "/domain/devices/graphics", ctxt); @@ -1990,8 +1996,11 @@ virConfPtr xenXMParseXMLToConfig(virConnectPtr conn, const char *xml) { if (vncunused) { strcat(val, ",vncunused=1"); } else { + char portstr[50]; + int port = atoi((const char*)vncport); + snprintf(portstr, sizeof(portstr), "%d", port-5900); strcat(val, ",vncdisplay="); - strcat(val, (const char*)vncport); + strcat(val, portstr); } if (vncport) xmlFree(vncport);