Use virXMLFormatElement for the formatting which allows us to avoid looking through the array to see if any feature is enabled. Signed-off-by: Peter Krempa <pkrempa@xxxxxxxxxx> --- src/conf/domain_conf.c | 31 ++++++++++++------------------- 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 90aa02a7ea..beabbace94 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -27928,30 +27928,23 @@ virDomainDefFormatFeatures(virBufferPtr buf, break; case VIR_DOMAIN_FEATURE_CAPABILITIES: - if (def->features[i] == VIR_DOMAIN_CAPABILITIES_POLICY_DEFAULT && - !virDomainDefHasCapabilitiesFeatures(def)) { - break; - } + virBufferSetChildIndent(&tmpChildBuf, buf); - virBufferAsprintf(buf, "<capabilities policy='%s'", - virDomainCapabilitiesPolicyTypeToString(def->features[i])); - - if (!virDomainDefHasCapabilitiesFeatures(def)) { - virBufferAddLit(buf, "/>\n"); - break; - } else { - virBufferAddLit(buf, ">\n"); - } - virBufferAdjustIndent(buf, 2); for (j = 0; j < VIR_DOMAIN_CAPS_FEATURE_LAST; j++) { if (def->caps_features[j] != VIR_TRISTATE_SWITCH_ABSENT) - virBufferAsprintf(buf, "<%s state='%s'/>\n", + virBufferAsprintf(&tmpChildBuf, "<%s state='%s'/>\n", virDomainCapsFeatureTypeToString(j), - virTristateSwitchTypeToString( - def->caps_features[j])); + virTristateSwitchTypeToString(def->caps_features[j])); } - virBufferAdjustIndent(buf, -2); - virBufferAddLit(buf, "</capabilities>\n"); + + /* the 'default' policy should be printed if any capability is present */ + if (def->features[i] != VIR_DOMAIN_CAPABILITIES_POLICY_DEFAULT || + virBufferUse(&tmpChildBuf)) + virBufferAsprintf(&tmpAttrBuf, " policy='%s'", + virDomainCapabilitiesPolicyTypeToString(def->features[i])); + + if (virXMLFormatElement(buf, "capabilities", &tmpAttrBuf, &tmpChildBuf) < 0) + return -1; break; case VIR_DOMAIN_FEATURE_GIC: -- 2.20.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list