[libvirt] [PATCH 10/11] qemu: Refactor virQEMUCapsCacheLookupByArch()

Andrea Bolognani abologna at redhat.com
Thu Sep 20 15:25:28 UTC 2018


The new implementation contains less duplicated code and
is easier to extend.

This commit is best viewed with 'git show -w'.

Signed-off-by: Andrea Bolognani <abologna at redhat.com>
---
 src/qemu/qemu_capabilities.c | 35 ++++++++++++++++++-----------------
 1 file changed, 18 insertions(+), 17 deletions(-)

diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index b78b935404..b621f39a82 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -4752,26 +4752,27 @@ virQEMUCapsCacheLookupByArch(virFileCachePtr cache,
                              virArch arch)
 {
     virQEMUCapsPtr ret = NULL;
-    virArch target;
-    struct virQEMUCapsSearchData data = { .arch = arch };
-
-    ret = virFileCacheLookupByFunc(cache, virQEMUCapsCompareArch, &data);
-    if (!ret) {
-        /* If the first attempt at finding capabilities has failed, try
-         * again using the QEMU target as lookup key instead */
-        target = virQEMUCapsFindTarget(virArchFromHost(), data.arch);
-        if (target != data.arch) {
-            data.arch = target;
-            ret = virFileCacheLookupByFunc(cache, virQEMUCapsCompareArch, &data);
-        }
-    }
+    virArch archs[] = {
+        arch,
+        virQEMUCapsFindTarget(virArchFromHost(), arch),
+    };
+    size_t j;
 
-    if (!ret) {
-        virReportError(VIR_ERR_INVALID_ARG,
-                       _("unable to find any emulator to serve '%s' "
-                         "architecture"), virArchToString(arch));
+    for (j = 0; j < ARRAY_CARDINALITY(archs); j++) {
+        struct virQEMUCapsSearchData data = {
+            .arch = archs[j],
+        };
+
+        ret = virFileCacheLookupByFunc(cache, virQEMUCapsCompareArch, &data);
+        if (ret)
+            goto done;
     }
 
+    virReportError(VIR_ERR_INVALID_ARG,
+                   _("unable to find any emulator to serve '%s' "
+                     "architecture"), virArchToString(arch));
+
+ done:
     VIR_DEBUG("Returning caps %p for arch %s", ret, virArchToString(arch));
 
     return ret;
-- 
2.17.1




More information about the libvir-list mailing list