[libvirt] [PATCH 4/8] Use virQEMUCapsSetFromNodes where possible

Ján Tomko jtomko at redhat.com
Thu Feb 21 15:42:26 UTC 2019


Remove some code duplication.

Signed-off-by: Ján Tomko <jtomko at redhat.com>
---
 src/qemu/qemu_capabilities.c |  2 +-
 src/qemu/qemu_capabilities.h |  4 ++++
 src/qemu/qemu_domain.c       | 16 ++--------------
 tests/qemucaps2xmltest.c     | 17 +++--------------
 4 files changed, 10 insertions(+), 29 deletions(-)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index a355ee2e37..b12f5914aa 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -3442,7 +3442,7 @@ virQEMUCapsParseSEVInfo(virQEMUCapsPtr qemuCaps, xmlXPathContextPtr ctxt)
 }
 
 
-static int
+int
 virQEMUCapsSetFromNodes(virQEMUCapsPtr qemuCaps,
                         xmlNodePtr *nodes,
                         size_t n)
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
index 6fa402a846..d1303da3cf 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -516,6 +516,10 @@ virQEMUCapsPtr virQEMUCapsNew(void);
 
 void virQEMUCapsSet(virQEMUCapsPtr qemuCaps,
                     virQEMUCapsFlags flag) ATTRIBUTE_NONNULL(1);
+int virQEMUCapsSetFromNodes(virQEMUCapsPtr qemuCaps,
+                            xmlNodePtr *nodes,
+                            size_t nnodes)
+    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2);
 
 void virQEMUCapsSetList(virQEMUCapsPtr qemuCaps, ...) ATTRIBUTE_NONNULL(1);
 
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index bbd4a5efe8..ef44252cba 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -2995,20 +2995,8 @@ qemuDomainObjPrivateXMLParse(xmlXPathContextPtr ctxt,
         if (!(qemuCaps = virQEMUCapsNew()))
             goto error;
 
-        for (i = 0; i < n; i++) {
-            char *str = virXMLPropString(nodes[i], "name");
-            if (str) {
-                int flag = virQEMUCapsTypeFromString(str);
-                if (flag < 0) {
-                    virReportError(VIR_ERR_INTERNAL_ERROR,
-                                   _("Unknown qemu capabilities flag %s"), str);
-                    VIR_FREE(str);
-                    goto error;
-                }
-                VIR_FREE(str);
-                virQEMUCapsSet(qemuCaps, flag);
-            }
-        }
+        if (virQEMUCapsSetFromNodes(qemuCaps, nodes, n) < 0)
+            goto error;
 
         VIR_STEAL_PTR(priv->qemuCaps, qemuCaps);
     }
diff --git a/tests/qemucaps2xmltest.c b/tests/qemucaps2xmltest.c
index 0d9b4e679a..3e96c643da 100644
--- a/tests/qemucaps2xmltest.c
+++ b/tests/qemucaps2xmltest.c
@@ -38,7 +38,7 @@ testQemuGetCaps(char *caps)
     virQEMUCapsPtr qemuCaps = NULL;
     xmlDocPtr xml;
     xmlXPathContextPtr ctxt = NULL;
-    ssize_t i, n;
+    ssize_t n;
     xmlNodePtr *nodes = NULL;
 
     if (!(xml = virXMLParseStringCtxt(caps, "(test caps)", &ctxt)))
@@ -52,19 +52,8 @@ testQemuGetCaps(char *caps)
     if (!(qemuCaps = virQEMUCapsNew()))
         goto error;
 
-    for (i = 0; i < n; i++) {
-        char *str = virXMLPropString(nodes[i], "name");
-        if (str) {
-            int flag = virQEMUCapsTypeFromString(str);
-            if (flag < 0) {
-                fprintf(stderr, "Unknown qemu capabilities flag %s", str);
-                VIR_FREE(str);
-                goto error;
-            }
-            VIR_FREE(str);
-            virQEMUCapsSet(qemuCaps, flag);
-        }
-    }
+    if (virQEMUCapsSetFromNodes(qemuCaps, nodes, n) < 0)
+        goto error;
 
     VIR_FREE(nodes);
     xmlFreeDoc(xml);
-- 
2.19.2




More information about the libvir-list mailing list