From: Peter Krempa <pkrempa@redhat.com> Signed-off-by: Peter Krempa <pkrempa@redhat.com> --- 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