]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
list: new helper function to collect snapshots
authorEric Blake <eblake@redhat.com>
Wed, 13 Jun 2012 22:57:36 +0000 (16:57 -0600)
committerEric Blake <eblake@redhat.com>
Tue, 19 Jun 2012 20:51:54 +0000 (14:51 -0600)
Wraps the conversion from 'char *name' to virDomainSnapshotPtr in
a reusable manner.

* src/conf/virdomainlist.h (virDomainListSnapshots): New declaration.
* src/conf/virdomainlist.c (virDomainListSnapshots): Implement it.
* src/libvirt_private.syms (virdomainlist.h): Export it.

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

index e673af5ad6b5a05dbe98a7decd9ba263536c1528..6ac2af154ea455cf4a6c5191dffdb28552d59813 100644 (file)
@@ -180,3 +180,47 @@ cleanup:
     VIR_FREE(data.domains);
     return ret;
 }
+
+int
+virDomainListSnapshots(virDomainSnapshotObjListPtr snapshots,
+                       virDomainSnapshotObjPtr from,
+                       virDomainPtr dom,
+                       virDomainSnapshotPtr **snaps,
+                       unsigned int flags)
+{
+    int count = virDomainSnapshotObjListNum(snapshots, from, flags);
+    virDomainSnapshotPtr *list;
+    char **names;
+    int ret = -1;
+    int i;
+
+    if (!snaps)
+        return count;
+    if (VIR_ALLOC_N(names, count) < 0 ||
+        VIR_ALLOC_N(list, count + 1) < 0) {
+        virReportOOMError();
+        goto cleanup;
+    }
+
+    if (virDomainSnapshotObjListGetNames(snapshots, from, names, count,
+                                         flags) < 0)
+        goto cleanup;
+    for (i = 0; i < count; i++)
+        if ((list[i] = virGetDomainSnapshot(dom, names[i])) == NULL)
+            goto cleanup;
+
+    ret = count;
+    *snaps = list;
+
+cleanup:
+    for (i = 0; i < count; i++)
+        VIR_FREE(names[i]);
+    VIR_FREE(names);
+    if (ret < 0 && list) {
+        for (i = 0; i < count; i++)
+            if (list[i])
+                virDomainSnapshotFree(list[i]);
+        VIR_FREE(list);
+    }
+    return ret;
+}
index 7a066d22199212c38e778d7bb179ebc29e42587e..e6231292570e05e982d46bead44f8e18201d51d4 100644 (file)
 int virDomainList(virConnectPtr conn, virHashTablePtr domobjs,
                   virDomainPtr **domains, unsigned int flags);
 
+int virDomainListSnapshots(virDomainSnapshotObjListPtr snapshots,
+                           virDomainSnapshotObjPtr from,
+                           virDomainPtr dom,
+                           virDomainSnapshotPtr **snaps,
+                           unsigned int flags);
+
 #endif /* __VIR_DOMAIN_LIST_H__ */
index b37fe6859ccebc32dcc5785c6bc3fd48e83cbe33..2fe5068784a2efb2a8fb878c557bdf79e6c921c5 100644 (file)
@@ -1239,6 +1239,7 @@ virDBusGetSystemBus;
 
 # virdomainlist.h
 virDomainList;
+virDomainListSnapshots;
 
 
 # virfile.h