Well, not that we are not formatting invalid XML, rather than not as
beautiful as we can:
<cpu mode='host-passthrough'>
</cpu>
If there are no children, let's use the singleton element.
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
---
src/conf/cpu_conf.c | 19 +++++++++++++------
.../qemuxml2argv-cpu-host-kvmclock.xml | 3 +--
2 files changed, 14 insertions(+), 8 deletions(-)
diff --git a/src/conf/cpu_conf.c b/src/conf/cpu_conf.c
index 9a430ef..1a35185 100644
--- a/src/conf/cpu_conf.c
+++ b/src/conf/cpu_conf.c
@@ -556,6 +556,8 @@ virCPUDefFormatBufFull(virBufferPtr buf,
bool updateCPU)
{
int ret = -1;
+ virBuffer childrenBuf = VIR_BUFFER_INITIALIZER;
+ int indent = virBufferGetIndent(buf, false);
if (!def)
return 0;
@@ -585,20 +587,25 @@ virCPUDefFormatBufFull(virBufferPtr buf,
virBufferAsprintf(buf, " match='%s'", tmp);
}
}
- virBufferAddLit(buf, ">\n");
- virBufferAdjustIndent(buf, 2);
+ virBufferAdjustIndent(&childrenBuf, indent + 2);
if (def->arch)
- virBufferAsprintf(buf, "<arch>%s</arch>\n",
+ virBufferAsprintf(&childrenBuf, "<arch>%s</arch>\n",
virArchToString(def->arch));
- if (virCPUDefFormatBuf(buf, def, updateCPU) < 0)
+ if (virCPUDefFormatBuf(&childrenBuf, def, updateCPU) < 0)
goto cleanup;
- virBufferAdjustIndent(buf, -2);
- virBufferAddLit(buf, "</cpu>\n");
+ if (virBufferUse(&childrenBuf)) {
+ virBufferAddLit(buf, ">\n");
+ virBufferAddBuffer(buf, &childrenBuf);
+ virBufferAddLit(buf, "</cpu>\n");
+ } else {
+ virBufferAddLit(buf, "/>\n");
+ }
ret = 0;
cleanup:
+ virBufferFreeAndReset(&childrenBuf);
return ret;
}
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-kvmclock.xml
b/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-kvmclock.xml
index 89153a5..8954278 100644
--- a/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-kvmclock.xml
+++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-host-kvmclock.xml
@@ -8,8 +8,7 @@
<type arch='x86_64' machine='pc'>hvm</type>
<boot dev='network'/>
</os>
- <cpu mode='host-passthrough'>
- </cpu>
+ <cpu mode='host-passthrough'/>
<clock offset='utc'>
<timer name='kvmclock' present='no'/>
</clock>
--
2.0.5