diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 0fea61a642ae34f2a7acc2972b3733d7c6a613e9..93d24ee068adba5717f6737743134580539a1fc1 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -23109,6 +23109,64 @@ virDomainObjListCollect(virDomainObjListPtr domlist, } +int +virDomainObjListConvert(virDomainObjListPtr domlist, + virConnectPtr conn, + virDomainPtr *doms, + size_t ndoms, + virDomainObjPtr **vms, + size_t *nvms, + virDomainObjListACLFilter filter, + unsigned int flags, + bool skip_missing) +{ + char uuidstr[VIR_UUID_STRING_BUFLEN]; + virDomainObjPtr vm; + size_t i; + + *nvms = 0; + *vms = NULL; + + virObjectLock(domlist); + for (i = 0; i < ndoms; i++) { + virDomainPtr dom = doms[i]; + + virUUIDFormat(dom->uuid, uuidstr); + + if (!(vm = virHashLookup(domlist->objs, uuidstr))) { + if (skip_missing) + continue; + + virObjectUnlock(domlist); + virReportError(VIR_ERR_NO_DOMAIN, + _("no domain with matching uuid '%s' (%s)"), + uuidstr, dom->name); + goto error; + } + + virObjectRef(vm); + + if (VIR_APPEND_ELEMENT(*vms, *nvms, vm) < 0) { + virObjectUnlock(domlist); + virObjectUnref(vm); + goto error; + } + } + virObjectUnlock(domlist); + + virDomainObjListFilter(vms, nvms, conn, filter, flags); + + return 0; + + error: + virObjectListFreeCount(*vms, *nvms); + *vms = NULL; + *nvms = 0; + + return -1; +} + + int virDomainObjListExport(virDomainObjListPtr domlist, virConnectPtr conn, diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 8bc9536c58949b5cd26f803a15c51a91f1820477..2cd105a7aad95386aebb5c45a09fe7c237ef483b 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -3062,6 +3062,15 @@ int virDomainObjListExport(virDomainObjListPtr doms, virDomainPtr **domains, virDomainObjListACLFilter filter, unsigned int flags); +int virDomainObjListConvert(virDomainObjListPtr domlist, + virConnectPtr conn, + virDomainPtr *doms, + size_t ndoms, + virDomainObjPtr **vms, + size_t *nvms, + virDomainObjListACLFilter filter, + unsigned int flags, + bool skip_missing); int virDomainDefMaybeAddController(virDomainDefPtr def, diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 9a7a9448f060473fe32bd67babd0ce2e3130bda0..67a7e21a204488f48e486dac28da0cb3c38ac740 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -386,6 +386,7 @@ virDomainObjGetPersistentDef; virDomainObjGetState; virDomainObjListAdd; virDomainObjListCollect; +virDomainObjListConvert; virDomainObjListExport; virDomainObjListFindByID; virDomainObjListFindByName;