[libvirt] [libvirt-python PATCH 11/23] Return correct python object

Pavel Hrdina phrdina at redhat.com
Thu Sep 24 14:01:48 UTC 2015


In case of error without setting an python exception we need to return
a correct python object.  For functions that returns anything else than
a number the return value is 'None', otherwise it's '-1'.

Signed-off-by: Pavel Hrdina <phrdina at redhat.com>
---
 libvirt-override.c | 29 ++++++++++++++++++-----------
 1 file changed, 18 insertions(+), 11 deletions(-)

diff --git a/libvirt-override.c b/libvirt-override.c
index a6339e5..d137185 100644
--- a/libvirt-override.c
+++ b/libvirt-override.c
@@ -1208,13 +1208,13 @@ libvirt_virDomainGetVcpus(PyObject *self ATTRIBUTE_UNUSED,
     domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain);
 
     if ((cpunum = getPyNodeCPUCount(virDomainGetConnect(domain))) < 0)
-        return VIR_PY_INT_FAIL;
+        return VIR_PY_NONE;
 
     LIBVIRT_BEGIN_ALLOW_THREADS;
     i_retval = virDomainGetInfo(domain, &dominfo);
     LIBVIRT_END_ALLOW_THREADS;
     if (i_retval < 0)
-        return VIR_PY_INT_FAIL;
+        return VIR_PY_NONE;
 
     if (VIR_ALLOC_N(cpuinfo, dominfo.nrVirtCpu) < 0)
         return PyErr_NoMemory();
@@ -1232,7 +1232,7 @@ libvirt_virDomainGetVcpus(PyObject *self ATTRIBUTE_UNUSED,
                                  cpumap, cpumaplen);
     LIBVIRT_END_ALLOW_THREADS;
     if (i_retval < 0) {
-        error = VIR_PY_INT_FAIL;
+        error = VIR_PY_NONE;
         goto cleanup;
     }
 
@@ -1448,7 +1448,7 @@ libvirt_virDomainGetVcpuPinInfo(PyObject *self ATTRIBUTE_UNUSED,
                                 PyObject *args)
 {
     virDomainPtr domain;
-    PyObject *pyobj_domain, *pycpumaps = NULL;
+    PyObject *pyobj_domain, *pycpumaps = NULL, *error = NULL;
     virDomainInfo dominfo;
     unsigned char *cpumaps = NULL;
     size_t cpumaplen, vcpu, pcpu;
@@ -1461,7 +1461,7 @@ libvirt_virDomainGetVcpuPinInfo(PyObject *self ATTRIBUTE_UNUSED,
     domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain);
 
     if ((cpunum = getPyNodeCPUCount(virDomainGetConnect(domain))) < 0)
-        return VIR_PY_INT_FAIL;
+        return VIR_PY_NONE;
 
     LIBVIRT_BEGIN_ALLOW_THREADS;
     i_retval = virDomainGetInfo(domain, &dominfo);
@@ -1478,8 +1478,11 @@ libvirt_virDomainGetVcpuPinInfo(PyObject *self ATTRIBUTE_UNUSED,
     i_retval = virDomainGetVcpuPinInfo(domain, dominfo.nrVirtCpu,
                                        cpumaps, cpumaplen, flags);
     LIBVIRT_END_ALLOW_THREADS;
-    if (i_retval < 0)
+
+    if (i_retval < 0) {
+        error = VIR_PY_NONE;
         goto cleanup;
+    }
 
     if ((pycpumaps = PyList_New(dominfo.nrVirtCpu)) == NULL)
         goto cleanup;
@@ -1506,7 +1509,7 @@ libvirt_virDomainGetVcpuPinInfo(PyObject *self ATTRIBUTE_UNUSED,
 
     Py_XDECREF(pycpumaps);
 
-    return NULL;
+    return error;
 }
 
 
@@ -3654,7 +3657,7 @@ libvirt_virStoragePoolGetAutostart(PyObject *self ATTRIBUTE_UNUSED,
     LIBVIRT_END_ALLOW_THREADS;
 
     if (c_retval < 0)
-        return VIR_PY_NONE;
+        return VIR_PY_INT_FAIL;
 
     py_retval = libvirt_intWrap(autostart);
     return py_retval;
@@ -4632,7 +4635,7 @@ libvirt_virDomainGetJobStats(PyObject *self ATTRIBUTE_UNUSED,
     rc = virDomainGetJobStats(domain, &type, &params, &nparams, flags);
     LIBVIRT_END_ALLOW_THREADS;
     if (rc < 0)
-        goto cleanup;
+        return VIR_PY_NONE;
 
     if (!(dict = getPyVirTypedParameter(params, nparams)))
         goto cleanup;
@@ -4865,8 +4868,10 @@ libvirt_virDomainGetDiskErrors(PyObject *self ATTRIBUTE_UNUSED,
         count = virDomainGetDiskErrors(domain, disks, ndisks, 0);
         LIBVIRT_END_ALLOW_THREADS;
 
-        if (count < 0)
+        if (count < 0) {
+            py_retval = VIR_PY_NONE;
             goto cleanup;
+        }
     }
 
     if (!(py_retval = PyDict_New()))
@@ -8442,8 +8447,10 @@ libvirt_virDomainGetFSInfo(PyObject *self ATTRIBUTE_UNUSED,
     c_retval = virDomainGetFSInfo(domain, &fsinfo, flags);
     LIBVIRT_END_ALLOW_THREADS;
 
-    if (c_retval < 0)
+    if (c_retval < 0) {
+        py_retval = VIR_PY_NONE;
         goto cleanup;
+    }
 
     /* convert to a Python list */
     if ((py_retval = PyList_New(c_retval)) == NULL)
-- 
2.5.3




More information about the libvir-list mailing list