From: Andrea Bolognani Date: Fri, 14 Sep 2018 12:29:51 +0000 (+0200) Subject: qemu: Refactor virQEMUCapsCacheLookupByArch() X-Git-Tag: v4.8.0-rc1~103 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7948ad4129a84a6b98983f8538198581ad40ee5d;p=thirdparty%2Flibvirt.git qemu: Refactor virQEMUCapsCacheLookupByArch() 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 --- diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index ca99a22700..e152868124 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;