Add virDomainObjListConvert that will take a list of virDomains, apply
filters and return a list of virDomainObjs.
---
src/conf/domain_conf.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++
src/conf/domain_conf.h | 9 ++++++++
src/libvirt_private.syms | 1 +
3 files changed, 64 insertions(+)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 66fe470..73dc33f 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -23072,6 +23072,60 @@ 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) {
+ virReportError(VIR_ERR_NO_DOMAIN,
+ _("no domain with matching uuid '%s'
(%s)"),
+ uuidstr, dom->name);
+ virObjectUnlock(domlist);
+ goto error;
+ }
+ } else {
+ virObjectRef(vm);
+
+ if (VIR_APPEND_ELEMENT(*vms, *nvms, vm) < 0)
+ 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,
virDomainPtr **domains,
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index ac11a20..06ca82f 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -3059,6 +3059,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 9a7a944..67a7e21 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -386,6 +386,7 @@ virDomainObjGetPersistentDef;
virDomainObjGetState;
virDomainObjListAdd;
virDomainObjListCollect;
+virDomainObjListConvert;
virDomainObjListExport;
virDomainObjListFindByID;
virDomainObjListFindByName;
--
2.3.5