]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
conf: move default video addition after XML parsing
authorJán Tomko <jtomko@redhat.com>
Mon, 11 Apr 2016 12:06:03 +0000 (14:06 +0200)
committerCole Robinson <crobinso@redhat.com>
Wed, 20 Apr 2016 13:20:51 +0000 (09:20 -0400)
Separate parsing of the XML from auto-generating the device.

(cherry picked from commit 6879be484c9502394e55c799f5bb95c24c510644)

src/conf/domain_conf.c

index d4c78fdb9fbb3d7c491dd9f2e413db97a8ee4730..11e867335d73b7d80e331201c992fe7dc8a3b122 100644 (file)
@@ -16374,28 +16374,6 @@ virDomainDefParseXML(xmlDocPtr xml,
 
     VIR_FREE(nodes);
 
-    /* For backwards compatibility, if no <video> tag is set but there
-     * is a <graphics> tag, then we add a single video tag */
-    if (def->ngraphics && !def->nvideos) {
-        virDomainVideoDefPtr video;
-        if (VIR_ALLOC(video) < 0)
-            goto error;
-        video->type = virDomainVideoDefaultType(def);
-        if (video->type < 0) {
-            virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
-                           _("cannot determine default video type"));
-            VIR_FREE(video);
-            goto error;
-        }
-        video->vram = virDomainVideoDefaultRAM(def, video->type);
-        video->heads = 1;
-        if (VIR_ALLOC_N(def->videos, 1) < 0) {
-            virDomainVideoDefFree(video);
-            goto error;
-        }
-        def->videos[def->nvideos++] = video;
-    }
-
     /* analysis of the host devices */
     if ((n = virXPathNodeSet("./devices/hostdev", ctxt, &nodes)) < 0)
         goto error;
@@ -18592,6 +18570,37 @@ virDomainDefAddImplicitControllers(virDomainDefPtr def)
     return 0;
 }
 
+static int
+virDomainDefAddImplicitVideo(virDomainDefPtr def)
+{
+    int ret = -1;
+    virDomainVideoDefPtr video = NULL;
+
+    /* For backwards compatibility, if no <video> tag is set but there
+     * is a <graphics> tag, then we add a single video tag */
+    if (def->ngraphics && !def->nvideos) {
+        if (VIR_ALLOC(video) < 0)
+            goto cleanup;
+        video->type = virDomainVideoDefaultType(def);
+        if (video->type < 0) {
+            virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                           _("cannot determine default video type"));
+            goto cleanup;
+        }
+        video->vram = virDomainVideoDefaultRAM(def, video->type);
+        video->heads = 1;
+        if (VIR_ALLOC_N(def->videos, 1) < 0)
+            goto cleanup;
+        def->videos[def->nvideos++] = video;
+        video = NULL;
+    }
+
+    ret = 0;
+ cleanup:
+    virDomainVideoDefFree(video);
+    return ret;
+}
+
 int
 virDomainDefAddImplicitDevices(virDomainDefPtr def)
 {
@@ -18601,6 +18610,9 @@ virDomainDefAddImplicitDevices(virDomainDefPtr def)
     if (virDomainDefAddImplicitControllers(def) < 0)
         return -1;
 
+    if (virDomainDefAddImplicitVideo(def) < 0)
+        return -1;
+
     return 0;
 }