[libvirt] [PATCH 5/6] conf: Add helper to convert list of virDomains to a list of virDomainObjs

Peter Krempa pkrempa at redhat.com
Thu Apr 30 12:44:45 UTC 2015


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




More information about the libvir-list mailing list