diff --git a/ChangeLog b/ChangeLog index 65c20530a362dbf27e1bf66f024a81e2b948f73c..ea1a17963b3e01beee22bb9919208c8236c91028 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 b0dc0ad3c1e91b5c7f85da2aa74c4025514fb4b3..288359da0926b11dcd0c2dc1a6be51520064a7d6 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);