diff -rup libvirt-0.2.3.orig/src/xm_internal.c libvirt-0.2.3.new/src/xm_internal.c --- libvirt-0.2.3.orig/src/xm_internal.c 2007-07-24 14:32:41.000000000 -0400 +++ libvirt-0.2.3.new/src/xm_internal.c 2007-08-09 12:46:58.000000000 -0400 @@ -916,7 +916,8 @@ char *xenXMDomainFormatXML(virConnectPtr } 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 && @@ -943,6 +944,8 @@ char *xenXMDomainFormatXML(virConnectPtr 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)) { @@ -950,11 +953,7 @@ char *xenXMDomainFormatXML(virConnectPtr } 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] == ',' || @@ -1899,11 +1917,18 @@ virConfPtr xenXMParseXMLToConfig(virConn "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);