]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Refactor virQEMUCapsCacheLookupByArch()
authorAndrea Bolognani <abologna@redhat.com>
Fri, 14 Sep 2018 12:29:51 +0000 (14:29 +0200)
committerAndrea Bolognani <abologna@redhat.com>
Fri, 21 Sep 2018 13:54:01 +0000 (15:54 +0200)
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@redhat.com>
src/qemu/qemu_capabilities.c

index ca99a227001f3f33057127b5379cc4fab69c4cec..e15286812494e47667f94dd4be2a0bca87e4aa67 100644 (file)
@@ -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;