]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
python: Add binding for virDomainGetDiskErrors
authorJiri Denemark <jdenemar@redhat.com>
Tue, 31 Jan 2012 06:34:51 +0000 (07:34 +0100)
committerJiri Denemark <jdenemar@redhat.com>
Wed, 1 Feb 2012 09:59:27 +0000 (10:59 +0100)
python/libvirt-override-api.xml
python/libvirt-override.c

index 704fee90b3b6e8d27e0ab4ba023f8f64a3a01f98..b2b81528776ecd9fd0ef0dee49153909d4817f48 100644 (file)
       <arg name='flags' type='unsigned int' info='an OR&apos;ed set of virDomainMemoryFlags'/>
       <return type='char *' info='the returned buffer or None in case of error'/>
     </function>
+    <function name='virDomainGetDiskErrors' file='python'>
+      <info>Extract errors on disk devices.</info>
+      <return type='virDomainDiskErrorPtr' info='dictionary of disks and their errors or None in case of error'/>
+      <arg name='domain' type='virDomainPtr' info='a domain object'/>
+      <arg name='flags' type='unsigned int' info='unused, always pass 0'/>
+    </function>
   </symbols>
 </api>
index d2aad0f8d139063d1abbabe3d653d2810229555c..18849f8c40ce451a9160d1a4533547cde4805012 100644 (file)
@@ -3484,6 +3484,59 @@ libvirt_virDomainGetBlockIoTune(PyObject *self ATTRIBUTE_UNUSED,
     return(pyreply);
 }
 
+static PyObject *
+libvirt_virDomainGetDiskErrors(PyObject *self ATTRIBUTE_UNUSED,
+                               PyObject *args)
+{
+    PyObject *py_retval = VIR_PY_NONE;
+    virDomainPtr domain;
+    PyObject *pyobj_domain;
+    unsigned int flags;
+    virDomainDiskErrorPtr disks = NULL;
+    unsigned int ndisks;
+    int count;
+    int i;
+
+    if (!PyArg_ParseTuple(args, (char *) "Oi:virDomainGetDiskErrors",
+                          &pyobj_domain, &flags))
+        return NULL;
+
+    domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain);
+
+    if ((count = virDomainGetDiskErrors(domain, NULL, 0, 0)) < 0)
+        return VIR_PY_NONE;
+    ndisks = count;
+
+    if (ndisks) {
+        if (!(disks = malloc(sizeof(*disks) * ndisks)))
+            return VIR_PY_NONE;
+
+        LIBVIRT_BEGIN_ALLOW_THREADS;
+        count = virDomainGetDiskErrors(domain, disks, ndisks, 0);
+        LIBVIRT_END_ALLOW_THREADS;
+
+        if (count < 0)
+            goto cleanup;
+    }
+
+    if (!(py_retval = PyDict_New()))
+        goto cleanup;
+
+    for (i = 0; i < count; i++) {
+        PyDict_SetItem(py_retval,
+                       libvirt_constcharPtrWrap(disks[i].disk),
+                       libvirt_intWrap(disks[i].error));
+    }
+
+cleanup:
+    if (disks) {
+        for (i = 0; i < count; i++)
+            free(disks[i].disk);
+        free(disks);
+    }
+    return py_retval;
+}
+
 /*******************************************
  * Helper functions to avoid importing modules
  * for every callback
@@ -5206,6 +5259,7 @@ static PyMethodDef libvirtMethods[] = {
     {(char *) "virDomainMigrateGetMaxSpeed", libvirt_virDomainMigrateGetMaxSpeed, METH_VARARGS, NULL},
     {(char *) "virDomainBlockPeek", libvirt_virDomainBlockPeek, METH_VARARGS, NULL},
     {(char *) "virDomainMemoryPeek", libvirt_virDomainMemoryPeek, METH_VARARGS, NULL},
+    {(char *) "virDomainGetDiskErrors", libvirt_virDomainGetDiskErrors, METH_VARARGS, NULL},
     {NULL, NULL, 0, NULL}
 };