summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Blake <eblake@redhat.com>2011-09-24 19:56:26 -0600
committerEric Blake <eblake@redhat.com>2011-10-10 16:54:16 -0600
commit4ba57a33c5ce575a837c9a71c2dd9d95382a82a2 (patch)
treeb597aa431a6108a77d06ccff1db9c967e0adb628
parente6f0751453273b3fa76b6fb2f554965288a16e2f (diff)
downloadlibvirt-python-split-4ba57a33c5ce575a837c9a71c2dd9d95382a82a2.tar.gz
libvirt-python-split-4ba57a33c5ce575a837c9a71c2dd9d95382a82a2.tar.xz
libvirt-python-split-4ba57a33c5ce575a837c9a71c2dd9d95382a82a2.zip
snapshot: new virDomainSnapshotListChildrenNames API
The previous API addition allowed traversal up the hierarchy; this one makes it easier to traverse down the hierarchy. In the python bindings, virDomainSnapshotNumChildren can be generated, but virDomainSnapshotListChildrenNames had to copy from the hand-written example of virDomainSnapshotListNames. * include/libvirt/libvirt.h.in (virDomainSnapshotNumChildren) (virDomainSnapshotListChildrenNames): New prototypes. (VIR_DOMAIN_SNAPSHOT_LIST_DESCENDANTS): New flag alias. * src/libvirt.c (virDomainSnapshotNumChildren) (virDomainSnapshotListChildrenNames): New functions. * src/libvirt_public.syms: Export them. * src/driver.h (virDrvDomainSnapshotNumChildren) (virDrvDomainSnapshotListChildrenNames): New callbacks. * python/generator.py (skip_impl, nameFixup): Update lists. * python/libvirt-override-api.xml: Likewise. * python/libvirt-override.c (libvirt_virDomainSnapshotListChildrenNames): New wrapper function.
-rwxr-xr-xgenerator.py4
-rw-r--r--libvirt-override-api.xml12
-rw-r--r--libvirt-override.c45
3 files changed, 58 insertions, 3 deletions
diff --git a/generator.py b/generator.py
index 79558dd..71afdb7 100755
--- a/generator.py
+++ b/generator.py
@@ -352,6 +352,7 @@ skip_impl = (
'virConnectListDefinedInterfaces',
'virConnectListNWFilters',
'virDomainSnapshotListNames',
+ 'virDomainSnapshotListChildrenNames',
'virConnGetLastError',
'virGetLastError',
'virDomainGetInfo',
@@ -963,6 +964,9 @@ def nameFixup(name, classe, type, file):
elif name[0:26] == "virDomainSnapshotListNames":
func = name[9:]
func = string.lower(func[0:1]) + func[1:]
+ elif name[0:28] == "virDomainSnapshotNumChildren":
+ func = name[17:]
+ func = string.lower(func[0:1]) + func[1:]
elif name[0:20] == "virDomainSnapshotNum":
func = name[9:]
func = string.lower(func[0:1]) + func[1:]
diff --git a/libvirt-override-api.xml b/libvirt-override-api.xml
index 3013e46..ef02f34 100644
--- a/libvirt-override-api.xml
+++ b/libvirt-override-api.xml
@@ -346,14 +346,20 @@
<function name='virDomainSnapshotListNames' file='python'>
<info>collect the list of snapshots for the given domain</info>
<arg name='dom' type='virDomainPtr' info='pointer to the domain'/>
- <arg name='flags' type='unsigned int' info='flags, curently unused'/>
- <return type='str *' info='the list of Names of None in case of error'/>
+ <arg name='flags' type='unsigned int' info='flags'/>
+ <return type='str *' info='the list of Names or None in case of error'/>
+ </function>
+ <function name='virDomainSnapshotListChildrenNames' file='python'>
+ <info>collect the list of child snapshots for the given snapshot</info>
+ <arg name='snapshot' type='virDomainSnapshotPtr' info='pointer to the snapshot'/>
+ <arg name='flags' type='unsigned int' info='flags'/>
+ <return type='str *' info='the list of Names or None in case of error'/>
</function>
<function name='virDomainRevertToSnapshot' file='python'>
<info>revert the domain to the given snapshot</info>
<arg name='dom' type='virDomainPtr' info='dummy domain pointer'/>
<arg name='snap' type='virDomainSnapshotPtr' info='pointer to the snapshot'/>
- <arg name='flags' type='unsigned int' info='flags, curently unused'/>
+ <arg name='flags' type='unsigned int' info='flags'/>
<return type='int' info="0 on success, -1 on error"/>
</function>
<function name='virDomainGetBlockJobInfo' file='python'>
diff --git a/libvirt-override.c b/libvirt-override.c
index d65423d..523c03b 100644
--- a/libvirt-override.c
+++ b/libvirt-override.c
@@ -1727,6 +1727,51 @@ libvirt_virDomainSnapshotListNames(PyObject *self ATTRIBUTE_UNUSED,
}
static PyObject *
+libvirt_virDomainSnapshotListChildrenNames(PyObject *self ATTRIBUTE_UNUSED,
+ PyObject *args) {
+ PyObject *py_retval;
+ char **names = NULL;
+ int c_retval, i;
+ virDomainSnapshotPtr snap;
+ PyObject *pyobj_snap;
+ unsigned int flags;
+
+ if (!PyArg_ParseTuple(args, (char *)"Oi:virDomainSnapshotListChildrenNames", &pyobj_snap, &flags))
+ return(NULL);
+ snap = (virDomainSnapshotPtr) PyvirDomainSnapshot_Get(pyobj_snap);
+
+ LIBVIRT_BEGIN_ALLOW_THREADS;
+ c_retval = virDomainSnapshotNumChildren(snap, flags);
+ LIBVIRT_END_ALLOW_THREADS;
+ if (c_retval < 0)
+ return VIR_PY_NONE;
+
+ if (c_retval) {
+ names = malloc(sizeof(*names) * c_retval);
+ if (!names)
+ return VIR_PY_NONE;
+ LIBVIRT_BEGIN_ALLOW_THREADS;
+ c_retval = virDomainSnapshotListChildrenNames(snap, names, c_retval, flags);
+ LIBVIRT_END_ALLOW_THREADS;
+ if (c_retval < 0) {
+ free(names);
+ return VIR_PY_NONE;
+ }
+ }
+ py_retval = PyList_New(c_retval);
+
+ if (names) {
+ for (i = 0;i < c_retval;i++) {
+ PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i]));
+ free(names[i]);
+ }
+ free(names);
+ }
+
+ return(py_retval);
+}
+
+static PyObject *
libvirt_virDomainRevertToSnapshot(PyObject *self ATTRIBUTE_UNUSED,
PyObject *args) {
int c_retval;