From e844b6e12cba1118d0e1e710f2b658e6a5127ab8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A1n=20Tomko?= Date: Tue, 29 Aug 2017 18:20:48 +0200 Subject: [PATCH] conf: use virXMLFormatElement for Use the new helper to simplify the code. This also fixes the bug of not formatting 'eim' in the useless case if it's the only enabled attribute. --- src/conf/domain_conf.c | 55 ++++++++++++++++++++++++------------------ 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 2fc1fc3402..590d90e0a0 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -25068,37 +25068,36 @@ virDomainDefIothreadShouldFormat(virDomainDefPtr def) } -static void +static int virDomainIOMMUDefFormat(virBufferPtr buf, const virDomainIOMMUDef *iommu) { virBuffer childBuf = VIR_BUFFER_INITIALIZER; + virBuffer driverAttrBuf = VIR_BUFFER_INITIALIZER; + int ret = -1; virBufferSetChildIndent(&childBuf, buf); - if (iommu->intremap != VIR_TRISTATE_SWITCH_ABSENT || - iommu->caching_mode != VIR_TRISTATE_SWITCH_ABSENT || - iommu->iotlb != VIR_TRISTATE_SWITCH_ABSENT) { - virBufferAddLit(&childBuf, "intremap != VIR_TRISTATE_SWITCH_ABSENT) { - virBufferAsprintf(&childBuf, " intremap='%s'", - virTristateSwitchTypeToString(iommu->intremap)); - } - if (iommu->caching_mode != VIR_TRISTATE_SWITCH_ABSENT) { - virBufferAsprintf(&childBuf, " caching_mode='%s'", - virTristateSwitchTypeToString(iommu->caching_mode)); - } - if (iommu->eim != VIR_TRISTATE_SWITCH_ABSENT) { - virBufferAsprintf(&childBuf, " eim='%s'", - virTristateSwitchTypeToString(iommu->eim)); - } - if (iommu->iotlb != VIR_TRISTATE_SWITCH_ABSENT) { - virBufferAsprintf(&childBuf, " iotlb='%s'", - virTristateSwitchTypeToString(iommu->iotlb)); - } - virBufferAddLit(&childBuf, "/>\n"); + if (iommu->intremap != VIR_TRISTATE_SWITCH_ABSENT) { + virBufferAsprintf(&driverAttrBuf, " intremap='%s'", + virTristateSwitchTypeToString(iommu->intremap)); + } + if (iommu->caching_mode != VIR_TRISTATE_SWITCH_ABSENT) { + virBufferAsprintf(&driverAttrBuf, " caching_mode='%s'", + virTristateSwitchTypeToString(iommu->caching_mode)); + } + if (iommu->eim != VIR_TRISTATE_SWITCH_ABSENT) { + virBufferAsprintf(&driverAttrBuf, " eim='%s'", + virTristateSwitchTypeToString(iommu->eim)); + } + if (iommu->iotlb != VIR_TRISTATE_SWITCH_ABSENT) { + virBufferAsprintf(&driverAttrBuf, " iotlb='%s'", + virTristateSwitchTypeToString(iommu->iotlb)); } + if (virXMLFormatElement(&childBuf, "driver", &driverAttrBuf, NULL) < 0) + goto cleanup; + virBufferAsprintf(buf, "model)); @@ -25109,6 +25108,13 @@ virDomainIOMMUDefFormat(virBufferPtr buf, } else { virBufferAddLit(buf, "/>\n"); } + + ret = 0; + + cleanup: + virBufferFreeAndReset(&childBuf); + virBufferFreeAndReset(&driverAttrBuf); + return ret; } @@ -25878,8 +25884,9 @@ virDomainDefFormatInternal(virDomainDefPtr def, goto error; } - if (def->iommu) - virDomainIOMMUDefFormat(buf, def->iommu); + if (def->iommu && + virDomainIOMMUDefFormat(buf, def->iommu) < 0) + goto error; virBufferAdjustIndent(buf, -2); virBufferAddLit(buf, "\n"); -- 2.39.5