From: Michal Privoznik Date: Mon, 30 Jun 2014 14:12:07 +0000 (+0200) Subject: qemu_capabilities: Introduce virQEMUCapsCacheLookupByArch X-Git-Tag: v1.2.7-rc1~240 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4e30af38536e5f11cac66170a8e5e3af022b26b3;p=thirdparty%2Flibvirt.git qemu_capabilities: Introduce virQEMUCapsCacheLookupByArch The API may come handy if somebody has an architecture and wants to look through available qemus if the architecture is supported or not. Signed-off-by: Michal Privoznik --- diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 751c14309a..2f8378a42f 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -299,6 +299,10 @@ struct _virQEMUCapsCache { gid_t runGid; }; +struct virQEMUCapsSearchData { + virArch arch; +}; + static virClassPtr virQEMUCapsClass; static void virQEMUCapsDispose(void *obj); @@ -3465,6 +3469,35 @@ virQEMUCapsCacheLookupCopy(virQEMUCapsCachePtr cache, const char *binary) } +static int +virQEMUCapsCompareArch(const void *payload, + const void *name ATTRIBUTE_UNUSED, + const void *opaque) +{ + struct virQEMUCapsSearchData *data = (struct virQEMUCapsSearchData *) opaque; + const virQEMUCaps *qemuCaps = payload; + + return qemuCaps->arch == data->arch; +} + + +virQEMUCapsPtr +virQEMUCapsCacheLookupByArch(virQEMUCapsCachePtr cache, + virArch arch) +{ + virQEMUCapsPtr ret = NULL; + struct virQEMUCapsSearchData data = { .arch = arch }; + + virMutexLock(&cache->lock); + ret = virHashSearch(cache->binaries, virQEMUCapsCompareArch, &data); + VIR_DEBUG("Returning caps %p for arch %s", ret, virArchToString(arch)); + virObjectRef(ret); + virMutexUnlock(&cache->lock); + + return ret; +} + + void virQEMUCapsCacheFree(virQEMUCapsCachePtr cache) { diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 53ebe9044b..1eb92b5231 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -274,6 +274,8 @@ virQEMUCapsPtr virQEMUCapsCacheLookup(virQEMUCapsCachePtr cache, const char *binary); virQEMUCapsPtr virQEMUCapsCacheLookupCopy(virQEMUCapsCachePtr cache, const char *binary); +virQEMUCapsPtr virQEMUCapsCacheLookupByArch(virQEMUCapsCachePtr cache, + virArch arch); void virQEMUCapsCacheFree(virQEMUCapsCachePtr cache); virCapsPtr virQEMUCapsInit(virQEMUCapsCachePtr cache);