diff --git a/src/conf/cpu_conf.c b/src/conf/cpu_conf.c
index cd3882df2c..e959ecca03 100644
--- a/src/conf/cpu_conf.c
+++ b/src/conf/cpu_conf.c
@@ -435,13 +435,14 @@ virCPUDefFormatBufFull(virBufferPtr buf,
bool updateCPU)
{
int ret = -1;
+ virBuffer attributeBuf = VIR_BUFFER_INITIALIZER;
virBuffer childrenBuf = VIR_BUFFER_INITIALIZER;
int indent = virBufferGetIndent(buf, false);
if (!def)
return 0;
- virBufferAddLit(buf, "type == VIR_CPU_TYPE_GUEST) {
const char *tmp;
@@ -451,7 +452,7 @@ virCPUDefFormatBufFull(virBufferPtr buf,
_("Unexpected CPU mode %d"), def->mode);
goto cleanup;
}
- virBufferAsprintf(buf, " mode='%s'", tmp);
+ virBufferAsprintf(&attributeBuf, " mode='%s'", tmp);
}
if (def->model &&
@@ -463,10 +464,11 @@ virCPUDefFormatBufFull(virBufferPtr buf,
def->match);
goto cleanup;
}
- virBufferAsprintf(buf, " match='%s'", tmp);
+ virBufferAsprintf(&attributeBuf, " match='%s'", tmp);
}
}
+ /* Format children */
virBufferAdjustIndent(&childrenBuf, indent + 2);
if (def->arch)
virBufferAsprintf(&childrenBuf, "%s\n",
@@ -477,16 +479,25 @@ virCPUDefFormatBufFull(virBufferPtr buf,
if (virDomainNumaDefCPUFormat(&childrenBuf, numa) < 0)
goto cleanup;
- if (virBufferUse(&childrenBuf)) {
- virBufferAddLit(buf, ">\n");
- virBufferAddBuffer(buf, &childrenBuf);
- virBufferAddLit(buf, "\n");
- } else {
- virBufferAddLit(buf, "/>\n");
+ /* Put it all together */
+ if (virBufferUse(&attributeBuf) || virBufferUse(&childrenBuf)) {
+ virBufferAddLit(buf, "\n");
+ virBufferAddBuffer(buf, &childrenBuf);
+ virBufferAddLit(buf, "\n");
+ } else {
+ virBufferAddLit(buf, "/>\n");
+ }
}
ret = 0;
cleanup:
+ virBufferFreeAndReset(&attributeBuf);
virBufferFreeAndReset(&childrenBuf);
return ret;
}
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-cpu-empty.xml b/tests/qemuxml2argvdata/qemuxml2argv-cpu-empty.xml
new file mode 100644
index 0000000000..2a79826b3a
--- /dev/null
+++ b/tests/qemuxml2argvdata/qemuxml2argv-cpu-empty.xml
@@ -0,0 +1,23 @@
+
+ cpu-empty
+ 1aed4c39-ad6e-4a78-9264-4ce996290d17
+ 4000768
+ 1048576
+ 1
+
+ hvm
+
+
+
+
+
+ destroy
+ restart
+ destroy
+
+ /usr/bin/qemu-kvm
+
+
+
+
+
diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-cpu-empty.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-cpu-empty.xml
new file mode 100644
index 0000000000..e678607183
--- /dev/null
+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-cpu-empty.xml
@@ -0,0 +1,21 @@
+
+ cpu-empty
+ 1aed4c39-ad6e-4a78-9264-4ce996290d17
+ 4000768
+ 1048576
+ 1
+
+ hvm
+
+
+
+ destroy
+ restart
+ destroy
+
+ /usr/bin/qemu-kvm
+
+
+
+
+
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
index 817e408337..cd0b280f92 100644
--- a/tests/qemuxml2xmltest.c
+++ b/tests/qemuxml2xmltest.c
@@ -361,6 +361,7 @@ mymain(void)
DO_TEST("clock-utc");
DO_TEST("clock-localtime");
+ DO_TEST_DIFFERENT("cpu-empty");
DO_TEST("cpu-kvmclock");
DO_TEST("cpu-host-kvmclock");
DO_TEST("cpu-host-passthrough-features");