[libvirt] [PATCH 1/7] conf: Extract host XML formatting from virCapabilitiesFormatXML

John Ferlan jferlan at redhat.com
Wed Jan 16 01:15:43 UTC 2019


Let's extract out the <host> code into it's own method/helper.

NB: One minor change between the two is usage of "buf" instead
of "&buf" in the new code since we pass the address of &buf to
the helper.

Signed-off-by: John Ferlan <jferlan at redhat.com>
---
 src/conf/capabilities.c | 135 ++++++++++++++++++++++------------------
 1 file changed, 76 insertions(+), 59 deletions(-)

diff --git a/src/conf/capabilities.c b/src/conf/capabilities.c
index 8e9bba0dbe..33c0c37fbf 100644
--- a/src/conf/capabilities.c
+++ b/src/conf/capabilities.c
@@ -1056,130 +1056,147 @@ virCapabilitiesFormatMemoryBandwidth(virBufferPtr buf,
     return 0;
 }
 
-/**
- * virCapabilitiesFormatXML:
- * @caps: capabilities to format
- *
- * Convert the capabilities object into an XML representation
- *
- * Returns the XML document as a string
- */
-char *
-virCapabilitiesFormatXML(virCapsPtr caps)
+
+static int
+virCapabilitiesFormatHostXML(virCapsPtr caps,
+                             virBufferPtr buf)
 {
-    virBuffer buf = VIR_BUFFER_INITIALIZER;
-    size_t i, j, k;
+    size_t i, j;
     char host_uuid[VIR_UUID_STRING_BUFLEN];
 
-    virBufferAddLit(&buf, "<capabilities>\n\n");
-    virBufferAdjustIndent(&buf, 2);
-    virBufferAddLit(&buf, "<host>\n");
-    virBufferAdjustIndent(&buf, 2);
+    virBufferAddLit(buf, "<host>\n");
+    virBufferAdjustIndent(buf, 2);
     if (virUUIDIsValid(caps->host.host_uuid)) {
         virUUIDFormat(caps->host.host_uuid, host_uuid);
-        virBufferAsprintf(&buf, "<uuid>%s</uuid>\n", host_uuid);
+        virBufferAsprintf(buf, "<uuid>%s</uuid>\n", host_uuid);
     }
-    virBufferAddLit(&buf, "<cpu>\n");
-    virBufferAdjustIndent(&buf, 2);
+    virBufferAddLit(buf, "<cpu>\n");
+    virBufferAdjustIndent(buf, 2);
 
     if (caps->host.arch)
-        virBufferAsprintf(&buf, "<arch>%s</arch>\n",
+        virBufferAsprintf(buf, "<arch>%s</arch>\n",
                           virArchToString(caps->host.arch));
     if (caps->host.nfeatures) {
-        virBufferAddLit(&buf, "<features>\n");
-        virBufferAdjustIndent(&buf, 2);
+        virBufferAddLit(buf, "<features>\n");
+        virBufferAdjustIndent(buf, 2);
         for (i = 0; i < caps->host.nfeatures; i++) {
-            virBufferAsprintf(&buf, "<%s/>\n",
+            virBufferAsprintf(buf, "<%s/>\n",
                               caps->host.features[i]);
         }
-        virBufferAdjustIndent(&buf, -2);
-        virBufferAddLit(&buf, "</features>\n");
+        virBufferAdjustIndent(buf, -2);
+        virBufferAddLit(buf, "</features>\n");
     }
-    virCPUDefFormatBuf(&buf, caps->host.cpu);
+    virCPUDefFormatBuf(buf, caps->host.cpu);
 
     for (i = 0; i < caps->host.nPagesSize; i++) {
-        virBufferAsprintf(&buf, "<pages unit='KiB' size='%u'/>\n",
+        virBufferAsprintf(buf, "<pages unit='KiB' size='%u'/>\n",
                           caps->host.pagesSize[i]);
     }
 
-    virBufferAdjustIndent(&buf, -2);
-    virBufferAddLit(&buf, "</cpu>\n");
+    virBufferAdjustIndent(buf, -2);
+    virBufferAddLit(buf, "</cpu>\n");
 
     /* The PM query was successful. */
     if (caps->host.powerMgmt) {
         /* The host supports some PM features. */
         unsigned int pm = caps->host.powerMgmt;
-        virBufferAddLit(&buf, "<power_management>\n");
-        virBufferAdjustIndent(&buf, 2);
+        virBufferAddLit(buf, "<power_management>\n");
+        virBufferAdjustIndent(buf, 2);
         while (pm) {
             int bit = ffs(pm) - 1;
-            virBufferAsprintf(&buf, "<%s/>\n",
+            virBufferAsprintf(buf, "<%s/>\n",
                               virCapsHostPMTargetTypeToString(bit));
             pm &= ~(1U << bit);
         }
-        virBufferAdjustIndent(&buf, -2);
-        virBufferAddLit(&buf, "</power_management>\n");
+        virBufferAdjustIndent(buf, -2);
+        virBufferAddLit(buf, "</power_management>\n");
     } else {
         /* The host does not support any PM feature. */
-        virBufferAddLit(&buf, "<power_management/>\n");
+        virBufferAddLit(buf, "<power_management/>\n");
     }
 
-    virBufferAsprintf(&buf, "<iommu support='%s'/>\n",
+    virBufferAsprintf(buf, "<iommu support='%s'/>\n",
                       caps->host.iommu  ? "yes" : "no");
 
     if (caps->host.offlineMigrate) {
-        virBufferAddLit(&buf, "<migration_features>\n");
-        virBufferAdjustIndent(&buf, 2);
+        virBufferAddLit(buf, "<migration_features>\n");
+        virBufferAdjustIndent(buf, 2);
         if (caps->host.liveMigrate)
-            virBufferAddLit(&buf, "<live/>\n");
+            virBufferAddLit(buf, "<live/>\n");
         if (caps->host.nmigrateTrans) {
-            virBufferAddLit(&buf, "<uri_transports>\n");
-            virBufferAdjustIndent(&buf, 2);
+            virBufferAddLit(buf, "<uri_transports>\n");
+            virBufferAdjustIndent(buf, 2);
             for (i = 0; i < caps->host.nmigrateTrans; i++) {
-                virBufferAsprintf(&buf, "<uri_transport>%s</uri_transport>\n",
+                virBufferAsprintf(buf, "<uri_transport>%s</uri_transport>\n",
                                   caps->host.migrateTrans[i]);
             }
-            virBufferAdjustIndent(&buf, -2);
-            virBufferAddLit(&buf, "</uri_transports>\n");
+            virBufferAdjustIndent(buf, -2);
+            virBufferAddLit(buf, "</uri_transports>\n");
         }
-        virBufferAdjustIndent(&buf, -2);
-        virBufferAddLit(&buf, "</migration_features>\n");
+        virBufferAdjustIndent(buf, -2);
+        virBufferAddLit(buf, "</migration_features>\n");
     }
 
     if (caps->host.netprefix)
-        virBufferAsprintf(&buf, "<netprefix>%s</netprefix>\n",
+        virBufferAsprintf(buf, "<netprefix>%s</netprefix>\n",
                           caps->host.netprefix);
 
     if (caps->host.nnumaCell &&
-        virCapabilitiesFormatNUMATopology(&buf, caps->host.nnumaCell,
+        virCapabilitiesFormatNUMATopology(buf, caps->host.nnumaCell,
                                           caps->host.numaCell) < 0)
         goto error;
 
-    if (virCapabilitiesFormatCaches(&buf, &caps->host.cache) < 0)
+    if (virCapabilitiesFormatCaches(buf, &caps->host.cache) < 0)
         goto error;
 
-    if (virCapabilitiesFormatMemoryBandwidth(&buf, &caps->host.memBW) < 0)
+    if (virCapabilitiesFormatMemoryBandwidth(buf, &caps->host.memBW) < 0)
         goto error;
 
     for (i = 0; i < caps->host.nsecModels; i++) {
-        virBufferAddLit(&buf, "<secmodel>\n");
-        virBufferAdjustIndent(&buf, 2);
-        virBufferAsprintf(&buf, "<model>%s</model>\n",
+        virBufferAddLit(buf, "<secmodel>\n");
+        virBufferAdjustIndent(buf, 2);
+        virBufferAsprintf(buf, "<model>%s</model>\n",
                           caps->host.secModels[i].model);
-        virBufferAsprintf(&buf, "<doi>%s</doi>\n",
+        virBufferAsprintf(buf, "<doi>%s</doi>\n",
                           caps->host.secModels[i].doi);
         for (j = 0; j < caps->host.secModels[i].nlabels; j++) {
-            virBufferAsprintf(&buf, "<baselabel type='%s'>%s</baselabel>\n",
+            virBufferAsprintf(buf, "<baselabel type='%s'>%s</baselabel>\n",
                               caps->host.secModels[i].labels[j].type,
                               caps->host.secModels[i].labels[j].label);
         }
-        virBufferAdjustIndent(&buf, -2);
-        virBufferAddLit(&buf, "</secmodel>\n");
+        virBufferAdjustIndent(buf, -2);
+        virBufferAddLit(buf, "</secmodel>\n");
     }
 
-    virBufferAdjustIndent(&buf, -2);
-    virBufferAddLit(&buf, "</host>\n\n");
+    virBufferAdjustIndent(buf, -2);
+    virBufferAddLit(buf, "</host>\n\n");
+
+    return 0;
+
+ error:
+    return -1;
+}
+
+
+/**
+ * virCapabilitiesFormatXML:
+ * @caps: capabilities to format
+ *
+ * Convert the capabilities object into an XML representation
+ *
+ * Returns the XML document as a string
+ */
+char *
+virCapabilitiesFormatXML(virCapsPtr caps)
+{
+    virBuffer buf = VIR_BUFFER_INITIALIZER;
+    size_t i, j, k;
 
+    virBufferAddLit(&buf, "<capabilities>\n\n");
+    virBufferAdjustIndent(&buf, 2);
+
+    if (virCapabilitiesFormatHostXML(caps, &buf) < 0)
+        goto error;
 
     for (i = 0; i < caps->nguests; i++) {
         virBufferAddLit(&buf, "<guest>\n");
-- 
2.20.1




More information about the libvir-list mailing list