Signed-off-by: Pavel Hrdina
---
src/conf/domain_conf.c | 835 +++--
1 file changed, 453 insertions(+), 382 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 9d48d07..fd9316f 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -10753,480 +10753,551 @@
virDomainGraphicsListensParseXML(virDomainGraphicsDefPtr def,
}
-/* Parse the XML definition for a graphics device */
-static virDomainGraphicsDefPtr
-virDomainGraphicsDefParseXML(xmlNodePtr node,
- xmlXPathContextPtr ctxt,
- unsigned int flags)
+static int
+virDomainGraphicsDefParseXMLVnc(virDomainGraphicsDefPtr def,
+xmlNodePtr node,
+unsigned int flags)
{
-virDomainGraphicsDefPtr def;
-char *type = NULL;
-
-if (VIR_ALLOC(def) < 0)
-return NULL;
-
-type = virXMLPropString(node, "type");
-if (!type) {
-virReportError(VIR_ERR_INTERNAL_ERROR,
- "%s", _("missing graphics device type"));
-goto error;
-}
-
-if ((def->type = virDomainGraphicsTypeFromString(type)) < 0) {
-virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
- _("unknown graphics device type '%s'"), type);
-goto error;
-}
-
-if (virDomainGraphicsListensParseXML(def, node, ctxt, flags) < 0)
-goto error;
-
-if (def->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC) {
-char *port = virXMLPropString(node, "port");
-char *websocket = virXMLPropString(node, "websocket");
-char *sharePolicy = virXMLPropString(node, "sharePolicy");
-char *autoport;
+char *port = virXMLPropString(node, "port");
+char *websocket = virXMLPropString(node, "websocket");
+char *sharePolicy = virXMLPropString(node, "sharePolicy");
+char *autoport;
+int ret = -1;
-if (port) {
-if (virStrToLong_i(port, NULL, 10, >data.vnc.port) < 0) {
-virReportError(VIR_ERR_INTERNAL_ERROR,
- _("cannot parse vnc port %s"), port);
-VIR_FREE(port);
-goto error;
-}
+if (port) {
+if (virStrToLong_i(port, NULL, 10, >data.vnc.port) < 0) {
+virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("cannot parse vnc port %s"), port);
VIR_FREE(port);
-/* Legacy compat syntax, used -1 for auto-port */
-if (def->data.vnc.port == -1) {
-if (flags & VIR_DOMAIN_DEF_PARSE_INACTIVE)
-def->data.vnc.port = 0;
-def->data.vnc.autoport = true;
-}
-} else {
-def->data.vnc.port = 0;
+goto error;
+}
+VIR_FREE(port);
+/* Legacy compat syntax, used -1 for auto-port */
+if (def->data.vnc.port == -1) {
+if (flags & VIR_DOMAIN_DEF_PARSE_INACTIVE)
+def->data.vnc.port = 0;
def->data.vnc.autoport = true;
}
+} else {
+def->data.vnc.port = 0;
+def->data.vnc.autoport = true;
+}
-if ((autoport = virXMLPropString(node, "autoport")) != NULL) {
-if (STREQ(autoport, "yes")) {
-if (flags & VIR_DOMAIN_DEF_PARSE_INACTIVE)
-def->data.vnc.port = 0;
-def->data.vnc.autoport = true;
-}
-VIR_FREE(autoport);
+if ((autoport = virXMLPropString(node, "autoport")) != NULL) {
+if (STREQ(autoport, "yes")) {
+if (flags & VIR_DOMAIN_DEF_PARSE_INACTIVE)
+def->data.vnc.port = 0;
+def->data.vnc.autoport = true;
}
+VIR_FREE(autoport);
+}
-if (websocket) {
-if (virStrToLong_i(websocket,
- NULL, 10,
- >data.vnc.websocket) < 0) {
-virReportError(VIR_ERR_INTERNAL_ERROR,
- _("cannot parse vnc WebSocket port %s"),
websocket);
-VIR_FREE(websocket);
-goto error;
-}
+if (websocket) {
+if (virStrToLong_i(websocket,
+ NULL, 10,
+ >data.vnc.websocket) < 0) {
+virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("cannot parse vnc WebSocket port %s"), websocket);
VIR_FREE(websocket);
+goto error;
}
+VIR_FREE(websocket);
+}
-if (sharePolicy) {
-int policy =
- virDomainGraphicsVNCSharePolicyTypeFromString(sharePolicy);
+if (sharePolicy) {
+int policy =
+ virDomainGraphicsVNCSharePolicyTypeFromString(sharePolicy);
-if (policy < 0) {
-virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
-