On 30.04.2015 14:44, Peter Krempa wrote:
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);
Move Unlock() before the virReportError(). Not that it would matter,
but: a) it keeps list locked for shorter time b) I always felt like
ReportError() and goto error should be joined together.
+ goto error;
+ }
+ } else {
+ virObjectRef(vm);
+
+ if (VIR_APPEND_ELEMENT(*vms, *nvms, vm) < 0)
Please unlock the @domlist before jumping anywhere.
+ goto error;
+ }
+ }
+ virObjectUnlock(domlist);
+
+ virDomainObjListFilter(vms, nvms, conn, filter, flags);
+
+ return 0;
+
+ error:
+ virObjectListFreeCount(*vms, *nvms);
+ *vms = NULL;
+ *nvms = 0;
+
+ return -1;
+}
+
+
Michal