From: Peter Krempa <[email protected]>

Signed-off-by: Peter Krempa <[email protected]>
---
 src/conf/domain_conf.c | 79 ++++++++++++++++++++----------------------
 1 file changed, 37 insertions(+), 42 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 2d3e646bcb..893027482d 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -27319,6 +27319,9 @@ static void
 virDomainVideoAccelDefFormat(virBuffer *buf,
                              virDomainVideoAccelDef *def)
 {
+    if (!def)
+        return;
+
     virBufferAddLit(buf, "<acceleration");
     if (def->accel3d) {
         virBufferAsprintf(buf, " accel3d='%s'",
@@ -27336,6 +27339,9 @@ static void
 virDomainVideoResolutionDefFormat(virBuffer *buf,
                                   virDomainVideoResolutionDef *def)
 {
+    if (!def)
+        return;
+
     virBufferAddLit(buf, "<resolution");
     if (def->x && def->y) {
         virBufferAsprintf(buf, " x='%u' y='%u'",
@@ -27350,7 +27356,10 @@ virDomainVideoDefFormat(virBuffer *buf,
                         unsigned int flags)
 {
     const char *model = virDomainVideoTypeToString(def->type);
-    g_auto(virBuffer) driverBuf = VIR_BUFFER_INITIALIZER;
+    g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf);
+    g_auto(virBuffer) driverAttrBuf = VIR_BUFFER_INITIALIZER;
+    g_auto(virBuffer) modelAttrBuf = VIR_BUFFER_INITIALIZER;
+    g_auto(virBuffer) modelChildBuf = VIR_BUFFER_INIT_CHILD(&childBuf);

     if (!model) {
         virReportError(VIR_ERR_INTERNAL_ERROR,
@@ -27358,61 +27367,47 @@ virDomainVideoDefFormat(virBuffer *buf,
         return -1;
     }

-    virBufferAddLit(buf, "<video>\n");
-    virBufferAdjustIndent(buf, 2);
-    virDomainVirtioOptionsFormat(&driverBuf, def->virtio);
-    if (virBufferUse(&driverBuf) || (def->driver && def->driver->vgaconf) ||
-        def->backend != VIR_DOMAIN_VIDEO_BACKEND_TYPE_DEFAULT) {
-        virBufferAddLit(buf, "<driver");
-        if (virBufferUse(&driverBuf))
-            virBufferAddBuffer(buf, &driverBuf);
-        if (def->driver && def->driver->vgaconf)
-            virBufferAsprintf(buf, " vgaconf='%s'",
-                              
virDomainVideoVGAConfTypeToString(def->driver->vgaconf));
-        if (def->backend != VIR_DOMAIN_VIDEO_BACKEND_TYPE_DEFAULT)
-            virBufferAsprintf(buf, " name='%s'",
-                              virDomainVideoBackendTypeToString(def->backend));
-        virBufferAddLit(buf, "/>\n");
-    }
-    virBufferAsprintf(buf, "<model type='%s'",
-                      model);
+    virDomainVirtioOptionsFormat(&driverAttrBuf, def->virtio);
+    if (def->driver && def->driver->vgaconf)
+        virBufferAsprintf(&driverAttrBuf, " vgaconf='%s'",
+                          
virDomainVideoVGAConfTypeToString(def->driver->vgaconf));
+    if (def->backend != VIR_DOMAIN_VIDEO_BACKEND_TYPE_DEFAULT)
+        virBufferAsprintf(&driverAttrBuf, " name='%s'",
+                          virDomainVideoBackendTypeToString(def->backend));
+
+    virXMLFormatElement(&childBuf, "driver", &driverAttrBuf, NULL);
+
+    virBufferAsprintf(&modelAttrBuf, " type='%s'", model);
     if (def->ram)
-        virBufferAsprintf(buf, " ram='%u'", def->ram);
+        virBufferAsprintf(&modelAttrBuf, " ram='%u'", def->ram);
     if (def->vram)
-        virBufferAsprintf(buf, " vram='%u'", def->vram);
+        virBufferAsprintf(&modelAttrBuf, " vram='%u'", def->vram);
     if (def->vram64)
-        virBufferAsprintf(buf, " vram64='%u'", def->vram64);
+        virBufferAsprintf(&modelAttrBuf, " vram64='%u'", def->vram64);
     if (def->vgamem)
-        virBufferAsprintf(buf, " vgamem='%u'", def->vgamem);
+        virBufferAsprintf(&modelAttrBuf, " vgamem='%u'", def->vgamem);
     if (def->heads)
-        virBufferAsprintf(buf, " heads='%u'", def->heads);
+        virBufferAsprintf(&modelAttrBuf, " heads='%u'", def->heads);
     if (def->primary)
-        virBufferAddLit(buf, " primary='yes'");
+        virBufferAddLit(&modelAttrBuf, " primary='yes'");
     if (def->blob != VIR_TRISTATE_SWITCH_ABSENT)
-        virBufferAsprintf(buf, " blob='%s'", 
virTristateSwitchTypeToString(def->blob));
+        virBufferAsprintf(&modelAttrBuf, " blob='%s'", 
virTristateSwitchTypeToString(def->blob));
     if (def->edid != VIR_TRISTATE_SWITCH_ABSENT)
-        virBufferAsprintf(buf, " edid='%s'", 
virTristateSwitchTypeToString(def->edid));
-    if (def->accel || def->res) {
-        virBufferAddLit(buf, ">\n");
-        virBufferAdjustIndent(buf, 2);
-        if (def->accel)
-            virDomainVideoAccelDefFormat(buf, def->accel);
-        if (def->res)
-            virDomainVideoResolutionDefFormat(buf, def->res);
-        virBufferAdjustIndent(buf, -2);
-        virBufferAddLit(buf, "</model>\n");
-    } else {
-        virBufferAddLit(buf, "/>\n");
-    }
+        virBufferAsprintf(&modelAttrBuf, " edid='%s'", 
virTristateSwitchTypeToString(def->edid));

-    virDomainDeviceInfoFormat(buf, &def->info, flags);
+    virDomainVideoAccelDefFormat(&modelChildBuf, def->accel);
+    virDomainVideoResolutionDefFormat(&modelChildBuf, def->res);

-    virBufferAdjustIndent(buf, -2);
-    virBufferAddLit(buf, "</video>\n");
+    virXMLFormatElement(&childBuf, "model", &modelAttrBuf, &modelChildBuf);
+
+    virDomainDeviceInfoFormat(&childBuf, &def->info, flags);
+
+    virXMLFormatElement(buf, "video", NULL, &childBuf);

     return 0;
 }

+
 static int
 virDomainInputDefFormat(virBuffer *buf,
                         virDomainInputDef *def,
-- 
2.54.0

Reply via email to