Separate parsing of the XML from auto-generating the device.
---
src/conf/domain_conf.c | 56 ++++++++++++++++++++++++++++++--------------------
1 file changed, 34 insertions(+), 22 deletions(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 9e547b4..12ce37c 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -16446,28 +16446,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;
@@ -18664,6 +18642,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)
{
@@ -18673,6 +18682,9 @@ virDomainDefAddImplicitDevices(virDomainDefPtr def)
if (virDomainDefAddImplicitControllers(def) < 0)
return -1;
+ if (virDomainDefAddImplicitVideo(def) < 0)
+ return -1;
+
return 0;
}
--
2.7.3