[libvirt] [PATCHv2 12/13] list: new helper function to collect snapshots

Eric Blake eblake at redhat.com
Fri Jun 15 04:18:37 UTC 2012


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.
---

v2: no real change

 src/conf/virdomainlist.c |   42 ++++++++++++++++++++++++++++++++++++++++++
 src/conf/virdomainlist.h |    6 ++++++
 src/libvirt_private.syms |    1 +
 3 files changed, 49 insertions(+)

diff --git a/src/conf/virdomainlist.c b/src/conf/virdomainlist.c
index 246b838..c680f18 100644
--- a/src/conf/virdomainlist.c
+++ b/src/conf/virdomainlist.c
@@ -180,3 +180,45 @@ 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;
+    }
+
+    virDomainSnapshotObjListGetNames(snapshots, from, names, count, flags);
+    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;
+}
diff --git a/src/conf/virdomainlist.h b/src/conf/virdomainlist.h
index 7a066d2..e623129 100644
--- a/src/conf/virdomainlist.h
+++ b/src/conf/virdomainlist.h
@@ -75,4 +75,10 @@
 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__ */
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index b37fe68..2fe5068 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -1239,6 +1239,7 @@ virDBusGetSystemBus;

 # virdomainlist.h
 virDomainList;
+virDomainListSnapshots;


 # virfile.h
-- 
1.7.10.2




More information about the libvir-list mailing list