From 6f1673eb80487d090c4abc2feaf6a6821fb09580 Mon Sep 17 00:00:00 2001 Message-ID: <6f1673eb80487d090c4abc2feaf6a6821fb09580.1737030652.git.jdenemar@redhat.com> From: =?UTF-8?q?J=C3=A1n=20Tomko?= Date: Mon, 6 Jan 2025 17:20:57 +0100 Subject: [PATCH] conf: refactor hyperv features formatting MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add a nested buffer for whatever sub-elements a particular hyperv feature might have. Signed-off-by: Ján Tomko Reviewed-by: Martin Kletzander (cherry picked from commit ad6b4d1fef275036b31a2bee435144871ebbcfbb) https://issues.redhat.com/browse/RHEL-7122 Signed-off-by: Martin Kletzander --- src/conf/domain_conf.c | 46 +++++++++++++++++------------------------- 1 file changed, 19 insertions(+), 27 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index c2164f6377..c8254d2146 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -27954,13 +27954,15 @@ virDomainDefFormatFeatures(virBuffer *buf, virBufferAsprintf(&childBuf, "\n", virDomainHyperVModeTypeToString(def->features[i])); - virBufferAdjustIndent(&childBuf, 2); + for (j = 0; j < VIR_DOMAIN_HYPERV_LAST; j++) { + g_auto(virBuffer) hypervAttrBuf = VIR_BUFFER_INITIALIZER; + g_auto(virBuffer) hypervChildBuf = VIR_BUFFER_INIT_CHILD(&tmpChildBuf); + if (def->hyperv_features[j] == VIR_TRISTATE_SWITCH_ABSENT) continue; - virBufferAsprintf(&childBuf, "<%s state='%s'", - virDomainHypervTypeToString(j), + virBufferAsprintf(&hypervAttrBuf, " state='%s'", virTristateSwitchTypeToString(def->hyperv_features[j])); switch ((virDomainHyperv) j) { @@ -27978,49 +27980,39 @@ virDomainDefFormatFeatures(virBuffer *buf, case VIR_DOMAIN_HYPERV_AVIC: case VIR_DOMAIN_HYPERV_EMSR_BITMAP: case VIR_DOMAIN_HYPERV_XMM_INPUT: - virBufferAddLit(&childBuf, "/>\n"); break; case VIR_DOMAIN_HYPERV_SPINLOCKS: - if (def->hyperv_features[j] != VIR_TRISTATE_SWITCH_ON) { - virBufferAddLit(&childBuf, "/>\n"); - break; + if (def->hyperv_features[j] == VIR_TRISTATE_SWITCH_ON) { + virBufferAsprintf(&hypervAttrBuf, + " retries='%d'", def->hyperv_spinlocks); } - virBufferAsprintf(&childBuf, " retries='%d'/>\n", - def->hyperv_spinlocks); break; case VIR_DOMAIN_HYPERV_STIMER: - if (def->hyperv_features[j] != VIR_TRISTATE_SWITCH_ON) { - virBufferAddLit(&childBuf, "/>\n"); - break; - } - if (def->hyperv_stimer_direct == VIR_TRISTATE_SWITCH_ON) { - virBufferAddLit(&childBuf, ">\n"); - virBufferAdjustIndent(&childBuf, 2); - virBufferAddLit(&childBuf, "\n"); - virBufferAdjustIndent(&childBuf, -2); - virBufferAddLit(&childBuf, "\n"); - } else { - virBufferAddLit(&childBuf, "/>\n"); + if (def->hyperv_features[j] == VIR_TRISTATE_SWITCH_ON && + def->hyperv_stimer_direct == VIR_TRISTATE_SWITCH_ON) { + virBufferAddLit(&hypervChildBuf, "\n"); } break; case VIR_DOMAIN_HYPERV_VENDOR_ID: - if (def->hyperv_features[j] != VIR_TRISTATE_SWITCH_ON) { - virBufferAddLit(&childBuf, "/>\n"); - break; + if (def->hyperv_features[j] == VIR_TRISTATE_SWITCH_ON) { + virBufferEscapeString(&hypervAttrBuf, " value='%s'", + def->hyperv_vendor_id); } - virBufferEscapeString(&childBuf, " value='%s'/>\n", - def->hyperv_vendor_id); break; case VIR_DOMAIN_HYPERV_LAST: break; } + + virXMLFormatElement(&tmpChildBuf, virDomainHypervTypeToString(j), + &hypervAttrBuf, &hypervChildBuf); } - virBufferAdjustIndent(&childBuf, -2); + + virBufferAddBuffer(&childBuf, &tmpChildBuf); virBufferAddLit(&childBuf, "\n"); break; -- 2.47.1