]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
conf: Add helper to convert list of virDomains to a list of virDomainObjs
authorPeter Krempa <pkrempa@redhat.com>
Wed, 29 Apr 2015 14:15:53 +0000 (16:15 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Mon, 11 May 2015 06:45:51 +0000 (08:45 +0200)
Add virDomainObjListConvert that will take a list of virDomains, apply
filters and return a list of virDomainObjs.

src/conf/domain_conf.c
src/conf/domain_conf.h
src/libvirt_private.syms

index 0fea61a642ae34f2a7acc2972b3733d7c6a613e9..93d24ee068adba5717f6737743134580539a1fc1 100644 (file)
@@ -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,
index 8bc9536c58949b5cd26f803a15c51a91f1820477..2cd105a7aad95386aebb5c45a09fe7c237ef483b 100644 (file)
@@ -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,
index 9a7a9448f060473fe32bd67babd0ce2e3130bda0..67a7e21a204488f48e486dac28da0cb3c38ac740 100644 (file)
@@ -386,6 +386,7 @@ virDomainObjGetPersistentDef;
 virDomainObjGetState;
 virDomainObjListAdd;
 virDomainObjListCollect;
+virDomainObjListConvert;
 virDomainObjListExport;
 virDomainObjListFindByID;
 virDomainObjListFindByName;