[libvirt] [PATCH 3/4] cpu: Format <cpu/> properly

Michal Privoznik mprivozn at redhat.com
Thu Feb 19 13:13:44 UTC 2015


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 at 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




More information about the libvir-list mailing list