[libvirt] [libvirt-python PATCH 00/23] Cleanup of the libvirt-python C code

This patch series tries to cleanup the libvirt-python C code and also make it more readable. It also fixes places, where we didn't checked for return values and where we also returned wrong values in case of errors. There are some other minor issues, that I've found. Pavel Hrdina (23): update virDomainGetVcpus xml API description refactor the function to not override python exceptions remove useless check for NULL before Py_XDECREF drop unnecessary goto Move utils and shared code into libvirt-utils cleanup functions definition indent labels by one space fix indentation wrap lines to 80 columns Return NULL if python exception is set Return correct python object Return NULL and set an exception if allocation fails Use VIR_PY_NONE instead use Py_CLEAR instead of Py_XDECREF followed by NULL assignment all Py*_New function has to be checked for return value change the order of some statements drop unnecessary py_retval variable improve usage of cleanup paths utils: introduce new macro helpers for tuple, list and dict objects use VIR_PY_TUPLE_GOTO use VYR_PY_LIST_SET_GOTO and VIR_PY_LIST_APPEND_GOTO use VIR_PY_DICT_SET_GOTO coverity: resolve dead_error_condition libvirt-lxc-override.c | 61 +- libvirt-override-api.xml | 4 +- libvirt-override.c | 3156 +++++++++++++++++++++------------------------- libvirt-qemu-override.c | 60 +- libvirt-utils.c | 422 ++++++- libvirt-utils.h | 133 ++ typewrappers.c | 65 +- 7 files changed, 2047 insertions(+), 1854 deletions(-) -- 2.5.3

Python api returns a tuple with the vcpus information. Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override-api.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libvirt-override-api.xml b/libvirt-override-api.xml index d1a9c26..1a0e314 100644 --- a/libvirt-override-api.xml +++ b/libvirt-override-api.xml @@ -239,8 +239,8 @@ <arg name='domain' type='virDomainPtr' info='pointer to domain object'/> </function> <function name='virDomainGetVcpus' file='python'> - <info>Extract information about virtual CPUs of domain, store it in info array and also in cpumaps if this pointer is'nt NULL.</info> - <return type='int' info='the number of info filled in case of success, -1 in case of failure.'/> + <info>Extract information about virtual CPUs of domain, store it in info array and also in cpumaps.</info> + <return type='char *' info='None in case of error, returns a tuple of vcpu info and vcpu map.'/> <arg name='domain' type='virDomainPtr' info='pointer to domain object, or NULL for Domain0'/> </function> <function name='virDomainPinVcpu' file='python'> -- 2.5.3

Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/libvirt-override.c b/libvirt-override.c index 4dfe332..14aa0e9 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -8263,38 +8263,31 @@ libvirt_virDomainSetTime(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { if (PyDict_Check(py_dict)) { py_dict_size = PyDict_Size(py_dict); if ((pyobj_seconds = PyDict_GetItemString(py_dict, "seconds"))) { - if (libvirt_longlongUnwrap(pyobj_seconds, &seconds) < 0) { - PyErr_Format(PyExc_LookupError, "malformed 'seconds'"); - goto cleanup; - } + if (libvirt_longlongUnwrap(pyobj_seconds, &seconds) < 0) + return NULL; } else { PyErr_Format(PyExc_LookupError, "Dictionary must contains 'seconds'"); - goto cleanup; + return NULL; } if ((pyobj_nseconds = PyDict_GetItemString(py_dict, "nseconds"))) { - if (libvirt_uintUnwrap(pyobj_nseconds, &nseconds) < 0) { - PyErr_Format(PyExc_LookupError, "malformed 'nseconds'"); - goto cleanup; - } + if (libvirt_uintUnwrap(pyobj_nseconds, &nseconds) < 0) + return NULL; } else if (py_dict_size > 1) { PyErr_Format(PyExc_LookupError, "Dictionary contains unknown key"); - goto cleanup; + return NULL; } } else if (py_dict != Py_None || !flags) { PyErr_Format(PyExc_TypeError, "time must be a dictionary " "or None with flags set"); - goto cleanup; + return NULL; } LIBVIRT_BEGIN_ALLOW_THREADS; c_retval = virDomainSetTime(domain, seconds, nseconds, flags); LIBVIRT_END_ALLOW_THREADS; - py_retval = libvirt_intWrap(c_retval); - - cleanup: - return py_retval; + return libvirt_intWrap(c_retval); } #endif /* LIBVIR_CHECK_VERSION(1, 2, 5) */ -- 2.5.3

On 09/24/2015 10:01 AM, Pavel Hrdina wrote:
Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-)
diff --git a/libvirt-override.c b/libvirt-override.c index 4dfe332..14aa0e9 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -8263,38 +8263,31 @@ libvirt_virDomainSetTime(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
Seems as though py_retval can be removed as it's no longer needed (build whine)
if (PyDict_Check(py_dict)) { py_dict_size = PyDict_Size(py_dict); if ((pyobj_seconds = PyDict_GetItemString(py_dict, "seconds"))) { - if (libvirt_longlongUnwrap(pyobj_seconds, &seconds) < 0) { - PyErr_Format(PyExc_LookupError, "malformed 'seconds'"); - goto cleanup; - } + if (libvirt_longlongUnwrap(pyobj_seconds, &seconds) < 0) + return NULL;
So if this was missing - would the error indicate 'seconds' was malformed? Or just some generic invalid value python error? I'm preferential to specific errors that help point me at what I did wrong. John
} else { PyErr_Format(PyExc_LookupError, "Dictionary must contains 'seconds'"); - goto cleanup; + return NULL; }
if ((pyobj_nseconds = PyDict_GetItemString(py_dict, "nseconds"))) { - if (libvirt_uintUnwrap(pyobj_nseconds, &nseconds) < 0) { - PyErr_Format(PyExc_LookupError, "malformed 'nseconds'"); - goto cleanup; - } + if (libvirt_uintUnwrap(pyobj_nseconds, &nseconds) < 0) + return NULL; } else if (py_dict_size > 1) { PyErr_Format(PyExc_LookupError, "Dictionary contains unknown key"); - goto cleanup; + return NULL; } } else if (py_dict != Py_None || !flags) { PyErr_Format(PyExc_TypeError, "time must be a dictionary " "or None with flags set"); - goto cleanup; + return NULL; }
LIBVIRT_BEGIN_ALLOW_THREADS; c_retval = virDomainSetTime(domain, seconds, nseconds, flags); LIBVIRT_END_ALLOW_THREADS;
- py_retval = libvirt_intWrap(c_retval); - - cleanup: - return py_retval; + return libvirt_intWrap(c_retval); } #endif /* LIBVIR_CHECK_VERSION(1, 2, 5) */

On Sat, Sep 26, 2015 at 09:08:11AM -0400, John Ferlan wrote:
On 09/24/2015 10:01 AM, Pavel Hrdina wrote:
Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-)
diff --git a/libvirt-override.c b/libvirt-override.c index 4dfe332..14aa0e9 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -8263,38 +8263,31 @@ libvirt_virDomainSetTime(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
Seems as though py_retval can be removed as it's no longer needed (build whine)
It seems, that I forgot to remove the declaration of unused variables through the whole series. Thanks for noticing that, I didn't get any error during compilation.
if (PyDict_Check(py_dict)) { py_dict_size = PyDict_Size(py_dict); if ((pyobj_seconds = PyDict_GetItemString(py_dict, "seconds"))) { - if (libvirt_longlongUnwrap(pyobj_seconds, &seconds) < 0) { - PyErr_Format(PyExc_LookupError, "malformed 'seconds'"); - goto cleanup; - } + if (libvirt_longlongUnwrap(pyobj_seconds, &seconds) < 0) + return NULL;
So if this was missing - would the error indicate 'seconds' was malformed? Or just some generic invalid value python error? I'm preferential to specific errors that help point me at what I did wrong.
Well, the reason, that the unwrap function fails don't have to always be relevant to the "malformed 'second'" and it could mislead the user that it's his fault, but it could be anything else. For example, the unwrap function checks, whether the pyobj_seconds is number or not. Pavel
John
} else { PyErr_Format(PyExc_LookupError, "Dictionary must contains 'seconds'"); - goto cleanup; + return NULL; }
if ((pyobj_nseconds = PyDict_GetItemString(py_dict, "nseconds"))) { - if (libvirt_uintUnwrap(pyobj_nseconds, &nseconds) < 0) { - PyErr_Format(PyExc_LookupError, "malformed 'nseconds'"); - goto cleanup; - } + if (libvirt_uintUnwrap(pyobj_nseconds, &nseconds) < 0) + return NULL; } else if (py_dict_size > 1) { PyErr_Format(PyExc_LookupError, "Dictionary contains unknown key"); - goto cleanup; + return NULL; } } else if (py_dict != Py_None || !flags) { PyErr_Format(PyExc_TypeError, "time must be a dictionary " "or None with flags set"); - goto cleanup; + return NULL; }
LIBVIRT_BEGIN_ALLOW_THREADS; c_retval = virDomainSetTime(domain, seconds, nseconds, flags); LIBVIRT_END_ALLOW_THREADS;
- py_retval = libvirt_intWrap(c_retval); - - cleanup: - return py_retval; + return libvirt_intWrap(c_retval); } #endif /* LIBVIR_CHECK_VERSION(1, 2, 5) */

Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/libvirt-override.c b/libvirt-override.c index 14aa0e9..114104b 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -2303,12 +2303,9 @@ libvirt_virRegisterErrorHandler(ATTRIBUTE_UNUSED PyObject * self, pyobj_f); virSetErrorFunc(NULL, libvirt_virErrorFuncHandler); - if (libvirt_virPythonErrorFuncHandler != NULL) { - Py_XDECREF(libvirt_virPythonErrorFuncHandler); - } - if (libvirt_virPythonErrorFuncCtxt != NULL) { - Py_XDECREF(libvirt_virPythonErrorFuncCtxt); - } + + Py_XDECREF(libvirt_virPythonErrorFuncHandler); + Py_XDECREF(libvirt_virPythonErrorFuncCtxt); if ((pyobj_f == Py_None) && (pyobj_ctx == Py_None)) { libvirt_virPythonErrorFuncHandler = NULL; -- 2.5.3

On 09/24/2015 10:01 AM, Pavel Hrdina wrote:
Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/libvirt-override.c b/libvirt-override.c index 14aa0e9..114104b 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -2303,12 +2303,9 @@ libvirt_virRegisterErrorHandler(ATTRIBUTE_UNUSED PyObject * self, pyobj_f);
virSetErrorFunc(NULL, libvirt_virErrorFuncHandler); - if (libvirt_virPythonErrorFuncHandler != NULL) { - Py_XDECREF(libvirt_virPythonErrorFuncHandler); - } - if (libvirt_virPythonErrorFuncCtxt != NULL) { - Py_XDECREF(libvirt_virPythonErrorFuncCtxt); - } + + Py_XDECREF(libvirt_virPythonErrorFuncHandler); + Py_XDECREF(libvirt_virPythonErrorFuncCtxt);
I keep looking at this and thinking why? Why was it added and what is it protecting. Looking at libvirt_virErrorFuncHandler it seems only libvirt_virPythonErrorFuncCtxt gets the Py_XINCREF and that's based on whether libvirt_virPythonErrorFuncHandler is NULL or not. Just feels like something subtle is going on. Also it's a register handler and we're decrementing something that never got incremented. John
if ((pyobj_f == Py_None) && (pyobj_ctx == Py_None)) { libvirt_virPythonErrorFuncHandler = NULL;

On Sat, Sep 26, 2015 at 09:08:35AM -0400, John Ferlan wrote:
On 09/24/2015 10:01 AM, Pavel Hrdina wrote:
Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/libvirt-override.c b/libvirt-override.c index 14aa0e9..114104b 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -2303,12 +2303,9 @@ libvirt_virRegisterErrorHandler(ATTRIBUTE_UNUSED PyObject * self, pyobj_f);
virSetErrorFunc(NULL, libvirt_virErrorFuncHandler); - if (libvirt_virPythonErrorFuncHandler != NULL) { - Py_XDECREF(libvirt_virPythonErrorFuncHandler); - } - if (libvirt_virPythonErrorFuncCtxt != NULL) { - Py_XDECREF(libvirt_virPythonErrorFuncCtxt); - } + + Py_XDECREF(libvirt_virPythonErrorFuncHandler); + Py_XDECREF(libvirt_virPythonErrorFuncCtxt);
I keep looking at this and thinking why? Why was it added and what is it protecting. Looking at libvirt_virErrorFuncHandler it seems only libvirt_virPythonErrorFuncCtxt gets the Py_XINCREF and that's based on whether libvirt_virPythonErrorFuncHandler is NULL or not.
I don't understand what do you mean by this??
Just feels like something subtle is going on. Also it's a register handler and we're decrementing something that never got incremented.
Check the whole function. It will decrement the old handlers, check for existence of new handlers and clean/set new handlers. And before setting the new handlers, we need to increment them, otherwise they will be cleared by GC. Everything that is parsed by 'PyArg_ParseTuple' has to be incremented, if you need to use those object outside of the function scope, where you've called that parser. Pavel
John
if ((pyobj_f == Py_None) && (pyobj_ctx == Py_None)) { libvirt_virPythonErrorFuncHandler = NULL;

On 09/29/2015 10:29 AM, Pavel Hrdina wrote:
On Sat, Sep 26, 2015 at 09:08:35AM -0400, John Ferlan wrote:
On 09/24/2015 10:01 AM, Pavel Hrdina wrote:
Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/libvirt-override.c b/libvirt-override.c index 14aa0e9..114104b 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -2303,12 +2303,9 @@ libvirt_virRegisterErrorHandler(ATTRIBUTE_UNUSED PyObject * self, pyobj_f);
virSetErrorFunc(NULL, libvirt_virErrorFuncHandler); - if (libvirt_virPythonErrorFuncHandler != NULL) { - Py_XDECREF(libvirt_virPythonErrorFuncHandler); - } - if (libvirt_virPythonErrorFuncCtxt != NULL) { - Py_XDECREF(libvirt_virPythonErrorFuncCtxt); - } + + Py_XDECREF(libvirt_virPythonErrorFuncHandler); + Py_XDECREF(libvirt_virPythonErrorFuncCtxt);
I keep looking at this and thinking why? Why was it added and what is it protecting. Looking at libvirt_virErrorFuncHandler it seems only libvirt_virPythonErrorFuncCtxt gets the Py_XINCREF and that's based on whether libvirt_virPythonErrorFuncHandler is NULL or not.
I don't understand what do you mean by this??
I guess the whole Py_XDECREF usage is still a bit of a mystery. I believe I was trying to consider why someone would have checked for NULL previously. I know from checking it was written that way. But I assume now that if on input it was NULL then nothing happens. No issues otherwise - John
Just feels like something subtle is going on. Also it's a register handler and we're decrementing something that never got incremented.
Check the whole function. It will decrement the old handlers, check for existence of new handlers and clean/set new handlers. And before setting the new handlers, we need to increment them, otherwise they will be cleared by GC.
Everything that is parsed by 'PyArg_ParseTuple' has to be incremented, if you need to use those object outside of the function scope, where you've called that parser.
Pavel
John
if ((pyobj_f == Py_None) && (pyobj_ctx == Py_None)) { libvirt_virPythonErrorFuncHandler = NULL;

Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/libvirt-override.c b/libvirt-override.c index 114104b..b18196f 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -476,27 +476,22 @@ cleanup: */ static int getPyNodeCPUCount(virConnectPtr conn) { - int i_retval = -1; + int i_retval; virNodeInfo nodeinfo; #if LIBVIR_CHECK_VERSION(1, 0, 0) LIBVIRT_BEGIN_ALLOW_THREADS; i_retval = virNodeGetCPUMap(conn, NULL, NULL, 0); LIBVIRT_END_ALLOW_THREADS; -#endif /* LIBVIR_CHECK_VERSION(1, 0, 0) */ - - if (i_retval < 0) { - /* fallback: use nodeinfo */ - LIBVIRT_BEGIN_ALLOW_THREADS; - i_retval = virNodeGetInfo(conn, &nodeinfo); - LIBVIRT_END_ALLOW_THREADS; - if (i_retval < 0) - goto cleanup; +#else /* fallback: use nodeinfo */ + LIBVIRT_BEGIN_ALLOW_THREADS; + i_retval = virNodeGetInfo(conn, &nodeinfo); + LIBVIRT_END_ALLOW_THREADS; + if (i_retval >= 0) i_retval = VIR_NODEINFO_MAXCPUS(nodeinfo); - } +#endif /* LIBVIR_CHECK_VERSION(1, 0, 0) */ -cleanup: return i_retval; } -- 2.5.3

On 09/24/2015 10:01 AM, Pavel Hrdina wrote:
Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-)
diff --git a/libvirt-override.c b/libvirt-override.c index 114104b..b18196f 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -476,27 +476,22 @@ cleanup: */ static int getPyNodeCPUCount(virConnectPtr conn) { - int i_retval = -1; + int i_retval; virNodeInfo nodeinfo;
'nodeinfo' is only valid for < 1, 0, 0 - there's a build error for me on this. John
#if LIBVIR_CHECK_VERSION(1, 0, 0) LIBVIRT_BEGIN_ALLOW_THREADS; i_retval = virNodeGetCPUMap(conn, NULL, NULL, 0); LIBVIRT_END_ALLOW_THREADS; -#endif /* LIBVIR_CHECK_VERSION(1, 0, 0) */ - - if (i_retval < 0) { - /* fallback: use nodeinfo */ - LIBVIRT_BEGIN_ALLOW_THREADS; - i_retval = virNodeGetInfo(conn, &nodeinfo); - LIBVIRT_END_ALLOW_THREADS; - if (i_retval < 0) - goto cleanup; +#else /* fallback: use nodeinfo */ + LIBVIRT_BEGIN_ALLOW_THREADS; + i_retval = virNodeGetInfo(conn, &nodeinfo); + LIBVIRT_END_ALLOW_THREADS;
+ if (i_retval >= 0) i_retval = VIR_NODEINFO_MAXCPUS(nodeinfo); - } +#endif /* LIBVIR_CHECK_VERSION(1, 0, 0) */
-cleanup: return i_retval; }

Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-lxc-override.c | 7 - libvirt-override.c | 413 ------------------------------------------------ libvirt-qemu-override.c | 7 - libvirt-utils.c | 406 +++++++++++++++++++++++++++++++++++++++++++++++ libvirt-utils.h | 51 ++++++ 5 files changed, 457 insertions(+), 427 deletions(-) diff --git a/libvirt-lxc-override.c b/libvirt-lxc-override.c index d0d9ffd..e0d3e60 100644 --- a/libvirt-lxc-override.c +++ b/libvirt-lxc-override.c @@ -47,13 +47,6 @@ extern void initcygvirtmod_lxc(void); do {} while (0) #endif -/* The two-statement sequence "Py_INCREF(Py_None); return Py_None;" - is so common that we encapsulate it here. Now, each use is simply - return VIR_PY_NONE; */ -#define VIR_PY_NONE (Py_INCREF (Py_None), Py_None) -#define VIR_PY_INT_FAIL (libvirt_intWrap(-1)) -#define VIR_PY_INT_SUCCESS (libvirt_intWrap(0)) - /************************************************************************ * * * Statistics * diff --git a/libvirt-override.c b/libvirt-override.c index b18196f..ff6f338 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -51,419 +51,6 @@ extern void initcygvirtmod(void); do {} while (0) #endif -/* The two-statement sequence "Py_INCREF(Py_None); return Py_None;" - is so common that we encapsulate it here. Now, each use is simply - return VIR_PY_NONE; */ -#define VIR_PY_NONE (Py_INCREF (Py_None), Py_None) -#define VIR_PY_INT_FAIL (libvirt_intWrap(-1)) -#define VIR_PY_INT_SUCCESS (libvirt_intWrap(0)) - -static char *py_str(PyObject *obj) -{ - PyObject *str = PyObject_Str(obj); - char *ret; - if (!str) { - PyErr_Print(); - PyErr_Clear(); - return NULL; - }; - libvirt_charPtrUnwrap(str, &ret); - return ret; -} - -/* Helper function to convert a virTypedParameter output array into a - * Python dictionary for return to the user. Return NULL on failure, - * after raising a python exception. */ -static PyObject * -getPyVirTypedParameter(const virTypedParameter *params, int nparams) -{ - PyObject *key, *val, *info; - size_t i; - - if ((info = PyDict_New()) == NULL) - return NULL; - - for (i = 0; i < nparams; i++) { - switch (params[i].type) { - case VIR_TYPED_PARAM_INT: - val = libvirt_intWrap(params[i].value.i); - break; - - case VIR_TYPED_PARAM_UINT: - val = libvirt_intWrap(params[i].value.ui); - break; - - case VIR_TYPED_PARAM_LLONG: - val = libvirt_longlongWrap(params[i].value.l); - break; - - case VIR_TYPED_PARAM_ULLONG: - val = libvirt_ulonglongWrap(params[i].value.ul); - break; - - case VIR_TYPED_PARAM_DOUBLE: - val = PyFloat_FromDouble(params[i].value.d); - break; - - case VIR_TYPED_PARAM_BOOLEAN: - val = PyBool_FromLong(params[i].value.b); - break; - - case VIR_TYPED_PARAM_STRING: - val = libvirt_constcharPtrWrap(params[i].value.s); - break; - - default: - /* Possible if a newer server has a bug and sent stuff we - * don't recognize. */ - PyErr_Format(PyExc_LookupError, - "Type value \"%d\" not recognized", - params[i].type); - val = NULL; - break; - } - - key = libvirt_constcharPtrWrap(params[i].field); - if (!key || !val) - goto cleanup; - - if (PyDict_SetItem(info, key, val) < 0) { - Py_DECREF(info); - goto cleanup; - } - - Py_DECREF(key); - Py_DECREF(val); - } - return info; - -cleanup: - Py_XDECREF(key); - Py_XDECREF(val); - return NULL; -} - -/* Allocate a new typed parameter array with the same contents and - * length as info, and using the array params of length nparams as - * hints on what types to use when creating the new array. The caller - * must clear the array before freeing it. Return NULL on failure, - * after raising a python exception. */ -static virTypedParameterPtr ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) -setPyVirTypedParameter(PyObject *info, - const virTypedParameter *params, int nparams) -{ - PyObject *key, *value; -#if PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION <= 4 - int pos = 0; -#else - Py_ssize_t pos = 0; -#endif - virTypedParameterPtr temp = NULL, ret = NULL; - Py_ssize_t size; - size_t i; - - if ((size = PyDict_Size(info)) < 0) - return NULL; - - /* Libvirt APIs use NULL array and 0 size as a special case; - * setting should have at least one parameter. */ - if (size == 0) { - PyErr_Format(PyExc_LookupError, "Dictionary must not be empty"); - return NULL; - } - - if (VIR_ALLOC_N(ret, size) < 0) { - PyErr_NoMemory(); - return NULL; - } - - temp = &ret[0]; - while (PyDict_Next(info, &pos, &key, &value)) { - char *keystr = NULL; - - if (libvirt_charPtrUnwrap(key, &keystr) < 0 || - keystr == NULL) - goto cleanup; - - for (i = 0; i < nparams; i++) { - if (STREQ(params[i].field, keystr)) - break; - } - if (i == nparams) { - PyErr_Format(PyExc_LookupError, - "Attribute name \"%s\" could not be recognized", - keystr); - VIR_FREE(keystr); - goto cleanup; - } - - strncpy(temp->field, keystr, VIR_TYPED_PARAM_FIELD_LENGTH - 1); - temp->type = params[i].type; - VIR_FREE(keystr); - - switch (params[i].type) { - case VIR_TYPED_PARAM_INT: - if (libvirt_intUnwrap(value, &temp->value.i) < 0) - goto cleanup; - break; - - case VIR_TYPED_PARAM_UINT: - if (libvirt_uintUnwrap(value, &temp->value.ui) < 0) - goto cleanup; - break; - - case VIR_TYPED_PARAM_LLONG: - if (libvirt_longlongUnwrap(value, &temp->value.l) < 0) - goto cleanup; - break; - - case VIR_TYPED_PARAM_ULLONG: - if (libvirt_ulonglongUnwrap(value, &temp->value.ul) < 0) - goto cleanup; - break; - - case VIR_TYPED_PARAM_DOUBLE: - if (libvirt_doubleUnwrap(value, &temp->value.d) < 0) - goto cleanup; - break; - - case VIR_TYPED_PARAM_BOOLEAN: - { - bool b; - if (libvirt_boolUnwrap(value, &b) < 0) - goto cleanup; - temp->value.b = b; - break; - } - case VIR_TYPED_PARAM_STRING: - { - char *string_val; - if (libvirt_charPtrUnwrap(value, &string_val) < 0 || - !string_val) - goto cleanup; - temp->value.s = string_val; - break; - } - - default: - /* Possible if a newer server has a bug and sent stuff we - * don't recognize. */ - PyErr_Format(PyExc_LookupError, - "Type value \"%d\" not recognized", - params[i].type); - goto cleanup; - } - - temp++; - } - return ret; - -cleanup: - virTypedParamsFree(ret, size); - return NULL; -} - -/* While these appeared in libvirt in 1.0.2, we only - * need them in the python from 1.1.0 onwards */ -#if LIBVIR_CHECK_VERSION(1, 1, 0) -typedef struct { - const char *name; - int type; -} virPyTypedParamsHint; -typedef virPyTypedParamsHint *virPyTypedParamsHintPtr; - -# if PY_MAJOR_VERSION > 2 -# define libvirt_PyString_Check PyUnicode_Check -# else -# define libvirt_PyString_Check PyString_Check -# endif - -static int -virPyDictToTypedParamOne(virTypedParameterPtr *params, - int *n, - int *max, - virPyTypedParamsHintPtr hints, - int nhints, - const char *keystr, - PyObject *value) -{ - int rv = -1, type = -1; - size_t i; - - for (i = 0; i < nhints; i++) { - if (STREQ(hints[i].name, keystr)) { - type = hints[i].type; - break; - } - } - - if (type == -1) { - if (libvirt_PyString_Check(value)) { - type = VIR_TYPED_PARAM_STRING; - } else if (PyBool_Check(value)) { - type = VIR_TYPED_PARAM_BOOLEAN; - } else if (PyLong_Check(value)) { - unsigned long long ull = PyLong_AsUnsignedLongLong(value); - if (ull == (unsigned long long) -1 && PyErr_Occurred()) - type = VIR_TYPED_PARAM_LLONG; - else - type = VIR_TYPED_PARAM_ULLONG; -#if PY_MAJOR_VERSION < 3 - } else if (PyInt_Check(value)) { - if (PyInt_AS_LONG(value) < 0) - type = VIR_TYPED_PARAM_LLONG; - else - type = VIR_TYPED_PARAM_ULLONG; -#endif - } else if (PyFloat_Check(value)) { - type = VIR_TYPED_PARAM_DOUBLE; - } - } - - if (type == -1) { - PyErr_Format(PyExc_TypeError, - "Unknown type of \"%s\" field", keystr); - goto cleanup; - } - - switch ((virTypedParameterType) type) { - case VIR_TYPED_PARAM_INT: - { - int val; - if (libvirt_intUnwrap(value, &val) < 0 || - virTypedParamsAddInt(params, n, max, keystr, val) < 0) - goto cleanup; - break; - } - case VIR_TYPED_PARAM_UINT: - { - unsigned int val; - if (libvirt_uintUnwrap(value, &val) < 0 || - virTypedParamsAddUInt(params, n, max, keystr, val) < 0) - goto cleanup; - break; - } - case VIR_TYPED_PARAM_LLONG: - { - long long val; - if (libvirt_longlongUnwrap(value, &val) < 0 || - virTypedParamsAddLLong(params, n, max, keystr, val) < 0) - goto cleanup; - break; - } - case VIR_TYPED_PARAM_ULLONG: - { - unsigned long long val; - if (libvirt_ulonglongUnwrap(value, &val) < 0 || - virTypedParamsAddULLong(params, n, max, keystr, val) < 0) - goto cleanup; - break; - } - case VIR_TYPED_PARAM_DOUBLE: - { - double val; - if (libvirt_doubleUnwrap(value, &val) < 0 || - virTypedParamsAddDouble(params, n, max, keystr, val) < 0) - goto cleanup; - break; - } - case VIR_TYPED_PARAM_BOOLEAN: - { - bool val; - if (libvirt_boolUnwrap(value, &val) < 0 || - virTypedParamsAddBoolean(params, n, max, keystr, val) < 0) - goto cleanup; - break; - } - case VIR_TYPED_PARAM_STRING: - { - char *val;; - if (libvirt_charPtrUnwrap(value, &val) < 0 || - !val || - virTypedParamsAddString(params, n, max, keystr, val) < 0) { - VIR_FREE(val); - goto cleanup; - } - VIR_FREE(val); - break; - } - case VIR_TYPED_PARAM_LAST: - break; /* unreachable */ - } - - rv = 0; - - cleanup: - return rv; -} - - -/* Automatically convert dict into type parameters based on types reported - * by python. All integer types are converted into LLONG (in case of a negative - * value) or ULLONG (in case of a positive value). If you need different - * handling, use @hints to explicitly specify what types should be used for - * specific parameters. - */ -static int -ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3) -virPyDictToTypedParams(PyObject *dict, - virTypedParameterPtr *ret_params, - int *ret_nparams, - virPyTypedParamsHintPtr hints, - int nhints) -{ - PyObject *key; - PyObject *value; -#if PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION <= 4 - int pos = 0; -#else - Py_ssize_t pos = 0; -#endif - virTypedParameterPtr params = NULL; - int n = 0; - int max = 0; - int ret = -1; - char *keystr = NULL; - - *ret_params = NULL; - *ret_nparams = 0; - - if (PyDict_Size(dict) < 0) - return -1; - - while (PyDict_Next(dict, &pos, &key, &value)) { - if (libvirt_charPtrUnwrap(key, &keystr) < 0 || - !keystr) - goto cleanup; - - if (PyList_Check(value) || PyTuple_Check(value)) { - Py_ssize_t i, size = PySequence_Size(value); - - for (i = 0; i < size; i++) { - PyObject *v = PySequence_ITEM(value, i); - if (virPyDictToTypedParamOne(¶ms, &n, &max, - hints, nhints, keystr, v) < 0) - goto cleanup; - } - } else if (virPyDictToTypedParamOne(¶ms, &n, &max, - hints, nhints, keystr, value) < 0) - goto cleanup; - - VIR_FREE(keystr); - } - - *ret_params = params; - *ret_nparams = n; - params = NULL; - ret = 0; - -cleanup: - VIR_FREE(keystr); - virTypedParamsFree(params, n); - return ret; -} -#endif /* LIBVIR_CHECK_VERSION(1, 1, 0) */ - /* * Utility function to retrieve the number of node CPUs present. diff --git a/libvirt-qemu-override.c b/libvirt-qemu-override.c index ce6f4fd..c082324 100644 --- a/libvirt-qemu-override.c +++ b/libvirt-qemu-override.c @@ -47,13 +47,6 @@ extern void initcygvirtmod_qemu(void); do {} while (0) #endif -/* The two-statement sequence "Py_INCREF(Py_None); return Py_None;" - is so common that we encapsulate it here. Now, each use is simply - return VIR_PY_NONE; */ -#define VIR_PY_NONE (Py_INCREF (Py_None), Py_None) -#define VIR_PY_INT_FAIL (libvirt_intWrap(-1)) -#define VIR_PY_INT_SUCCESS (libvirt_intWrap(0)) - /******************************************* * Helper functions to avoid importing modules * for every callback diff --git a/libvirt-utils.c b/libvirt-utils.c index d1f6e70..651d74f 100644 --- a/libvirt-utils.c +++ b/libvirt-utils.c @@ -19,12 +19,21 @@ * */ +#include <Python.h> + +/* Ugly python defines that, which is also defined in errno.h */ +#undef _POSIC_C_SOURCE + +/* We want to see *_LAST enums. */ +#define VIR_ENUM_SENTINELS + #include <errno.h> #include <stddef.h> #include <stdlib.h> #include <unistd.h> #include <libvirt/libvirt.h> #include "libvirt-utils.h" +#include "typewrappers.h" /** * virAlloc: @@ -184,3 +193,400 @@ virTypedParamsFree(virTypedParameterPtr params, VIR_FREE(params); } #endif /* ! LIBVIR_CHECK_VERSION(1, 0, 2) */ + +char * +py_str(PyObject *obj) +{ + PyObject *str = PyObject_Str(obj); + char *ret; + if (!str) { + PyErr_Print(); + PyErr_Clear(); + return NULL; + }; + libvirt_charPtrUnwrap(str, &ret); + return ret; +} + +/* Helper function to convert a virTypedParameter output array into a + * Python dictionary for return to the user. Return NULL on failure, + * after raising a python exception. */ +PyObject * +getPyVirTypedParameter(const virTypedParameter *params, + int nparams) +{ + PyObject *key, *val, *info; + size_t i; + + if ((info = PyDict_New()) == NULL) + return NULL; + + for (i = 0; i < nparams; i++) { + switch (params[i].type) { + case VIR_TYPED_PARAM_INT: + val = libvirt_intWrap(params[i].value.i); + break; + + case VIR_TYPED_PARAM_UINT: + val = libvirt_intWrap(params[i].value.ui); + break; + + case VIR_TYPED_PARAM_LLONG: + val = libvirt_longlongWrap(params[i].value.l); + break; + + case VIR_TYPED_PARAM_ULLONG: + val = libvirt_ulonglongWrap(params[i].value.ul); + break; + + case VIR_TYPED_PARAM_DOUBLE: + val = PyFloat_FromDouble(params[i].value.d); + break; + + case VIR_TYPED_PARAM_BOOLEAN: + val = PyBool_FromLong(params[i].value.b); + break; + + case VIR_TYPED_PARAM_STRING: + val = libvirt_constcharPtrWrap(params[i].value.s); + break; + + default: + /* Possible if a newer server has a bug and sent stuff we + * don't recognize. */ + PyErr_Format(PyExc_LookupError, + "Type value \"%d\" not recognized", + params[i].type); + val = NULL; + break; + } + + key = libvirt_constcharPtrWrap(params[i].field); + if (!key || !val) + goto cleanup; + + if (PyDict_SetItem(info, key, val) < 0) { + Py_DECREF(info); + goto cleanup; + } + + Py_DECREF(key); + Py_DECREF(val); + } + return info; + + cleanup: + Py_XDECREF(key); + Py_XDECREF(val); + return NULL; +} + +/* Allocate a new typed parameter array with the same contents and + * length as info, and using the array params of length nparams as + * hints on what types to use when creating the new array. The caller + * must clear the array before freeing it. Return NULL on failure, + * after raising a python exception. */ +virTypedParameterPtr +setPyVirTypedParameter(PyObject *info, + const virTypedParameter *params, + int nparams) +{ + PyObject *key, *value; +#if PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION <= 4 + int pos = 0; +#else + Py_ssize_t pos = 0; +#endif + virTypedParameterPtr temp = NULL, ret = NULL; + Py_ssize_t size; + size_t i; + + if ((size = PyDict_Size(info)) < 0) + return NULL; + + /* Libvirt APIs use NULL array and 0 size as a special case; + * setting should have at least one parameter. */ + if (size == 0) { + PyErr_Format(PyExc_LookupError, "Dictionary must not be empty"); + return NULL; + } + + if (VIR_ALLOC_N(ret, size) < 0) { + PyErr_NoMemory(); + return NULL; + } + + temp = &ret[0]; + while (PyDict_Next(info, &pos, &key, &value)) { + char *keystr = NULL; + + if (libvirt_charPtrUnwrap(key, &keystr) < 0 || + keystr == NULL) + goto cleanup; + + for (i = 0; i < nparams; i++) { + if (STREQ(params[i].field, keystr)) + break; + } + if (i == nparams) { + PyErr_Format(PyExc_LookupError, + "Attribute name \"%s\" could not be recognized", + keystr); + VIR_FREE(keystr); + goto cleanup; + } + + strncpy(temp->field, keystr, VIR_TYPED_PARAM_FIELD_LENGTH - 1); + temp->type = params[i].type; + VIR_FREE(keystr); + + switch (params[i].type) { + case VIR_TYPED_PARAM_INT: + if (libvirt_intUnwrap(value, &temp->value.i) < 0) + goto cleanup; + break; + + case VIR_TYPED_PARAM_UINT: + if (libvirt_uintUnwrap(value, &temp->value.ui) < 0) + goto cleanup; + break; + + case VIR_TYPED_PARAM_LLONG: + if (libvirt_longlongUnwrap(value, &temp->value.l) < 0) + goto cleanup; + break; + + case VIR_TYPED_PARAM_ULLONG: + if (libvirt_ulonglongUnwrap(value, &temp->value.ul) < 0) + goto cleanup; + break; + + case VIR_TYPED_PARAM_DOUBLE: + if (libvirt_doubleUnwrap(value, &temp->value.d) < 0) + goto cleanup; + break; + + case VIR_TYPED_PARAM_BOOLEAN: + { + bool b; + if (libvirt_boolUnwrap(value, &b) < 0) + goto cleanup; + temp->value.b = b; + break; + } + case VIR_TYPED_PARAM_STRING: + { + char *string_val; + if (libvirt_charPtrUnwrap(value, &string_val) < 0 || + !string_val) + goto cleanup; + temp->value.s = string_val; + break; + } + + default: + /* Possible if a newer server has a bug and sent stuff we + * don't recognize. */ + PyErr_Format(PyExc_LookupError, + "Type value \"%d\" not recognized", + params[i].type); + goto cleanup; + } + + temp++; + } + return ret; + +cleanup: + virTypedParamsFree(ret, size); + return NULL; +} + + +/* While these appeared in libvirt in 1.0.2, we only + * need them in the python from 1.1.0 onwards */ +#if LIBVIR_CHECK_VERSION(1, 1, 0) +int +virPyDictToTypedParamOne(virTypedParameterPtr *params, + int *n, + int *max, + virPyTypedParamsHintPtr hints, + int nhints, + const char *keystr, + PyObject *value) +{ + int rv = -1, type = -1; + size_t i; + + for (i = 0; i < nhints; i++) { + if (STREQ(hints[i].name, keystr)) { + type = hints[i].type; + break; + } + } + + if (type == -1) { + if (libvirt_PyString_Check(value)) { + type = VIR_TYPED_PARAM_STRING; + } else if (PyBool_Check(value)) { + type = VIR_TYPED_PARAM_BOOLEAN; + } else if (PyLong_Check(value)) { + unsigned long long ull = PyLong_AsUnsignedLongLong(value); + if (ull == (unsigned long long) -1 && PyErr_Occurred()) + type = VIR_TYPED_PARAM_LLONG; + else + type = VIR_TYPED_PARAM_ULLONG; +#if PY_MAJOR_VERSION < 3 + } else if (PyInt_Check(value)) { + if (PyInt_AS_LONG(value) < 0) + type = VIR_TYPED_PARAM_LLONG; + else + type = VIR_TYPED_PARAM_ULLONG; +#endif + } else if (PyFloat_Check(value)) { + type = VIR_TYPED_PARAM_DOUBLE; + } + } + + if (type == -1) { + PyErr_Format(PyExc_TypeError, + "Unknown type of \"%s\" field", keystr); + goto cleanup; + } + + switch ((virTypedParameterType) type) { + case VIR_TYPED_PARAM_INT: + { + int val; + if (libvirt_intUnwrap(value, &val) < 0 || + virTypedParamsAddInt(params, n, max, keystr, val) < 0) + goto cleanup; + break; + } + case VIR_TYPED_PARAM_UINT: + { + unsigned int val; + if (libvirt_uintUnwrap(value, &val) < 0 || + virTypedParamsAddUInt(params, n, max, keystr, val) < 0) + goto cleanup; + break; + } + case VIR_TYPED_PARAM_LLONG: + { + long long val; + if (libvirt_longlongUnwrap(value, &val) < 0 || + virTypedParamsAddLLong(params, n, max, keystr, val) < 0) + goto cleanup; + break; + } + case VIR_TYPED_PARAM_ULLONG: + { + unsigned long long val; + if (libvirt_ulonglongUnwrap(value, &val) < 0 || + virTypedParamsAddULLong(params, n, max, keystr, val) < 0) + goto cleanup; + break; + } + case VIR_TYPED_PARAM_DOUBLE: + { + double val; + if (libvirt_doubleUnwrap(value, &val) < 0 || + virTypedParamsAddDouble(params, n, max, keystr, val) < 0) + goto cleanup; + break; + } + case VIR_TYPED_PARAM_BOOLEAN: + { + bool val; + if (libvirt_boolUnwrap(value, &val) < 0 || + virTypedParamsAddBoolean(params, n, max, keystr, val) < 0) + goto cleanup; + break; + } + case VIR_TYPED_PARAM_STRING: + { + char *val;; + if (libvirt_charPtrUnwrap(value, &val) < 0 || + !val || + virTypedParamsAddString(params, n, max, keystr, val) < 0) { + VIR_FREE(val); + goto cleanup; + } + VIR_FREE(val); + break; + } + case VIR_TYPED_PARAM_LAST: + break; /* unreachable */ + } + + rv = 0; + + cleanup: + return rv; +} + + +/* Automatically convert dict into type parameters based on types reported + * by python. All integer types are converted into LLONG (in case of a negative + * value) or ULLONG (in case of a positive value). If you need different + * handling, use @hints to explicitly specify what types should be used for + * specific parameters. + */ +int +virPyDictToTypedParams(PyObject *dict, + virTypedParameterPtr *ret_params, + int *ret_nparams, + virPyTypedParamsHintPtr hints, + int nhints) +{ + PyObject *key; + PyObject *value; +#if PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION <= 4 + int pos = 0; +#else + Py_ssize_t pos = 0; +#endif + virTypedParameterPtr params = NULL; + int n = 0; + int max = 0; + int ret = -1; + char *keystr = NULL; + + *ret_params = NULL; + *ret_nparams = 0; + + if (PyDict_Size(dict) < 0) + return -1; + + while (PyDict_Next(dict, &pos, &key, &value)) { + if (libvirt_charPtrUnwrap(key, &keystr) < 0 || + !keystr) + goto cleanup; + + if (PyList_Check(value) || PyTuple_Check(value)) { + Py_ssize_t i, size = PySequence_Size(value); + + for (i = 0; i < size; i++) { + PyObject *v = PySequence_ITEM(value, i); + if (virPyDictToTypedParamOne(¶ms, &n, &max, + hints, nhints, keystr, v) < 0) + goto cleanup; + } + } else if (virPyDictToTypedParamOne(¶ms, &n, &max, + hints, nhints, keystr, value) < 0) + goto cleanup; + + VIR_FREE(keystr); + } + + *ret_params = params; + *ret_nparams = n; + params = NULL; + ret = 0; + +cleanup: + VIR_FREE(keystr); + virTypedParamsFree(params, n); + return ret; +} +#endif /* LIBVIR_CHECK_VERSION(1, 1, 0) */ diff --git a/libvirt-utils.h b/libvirt-utils.h index bef5489..9f80133 100644 --- a/libvirt-utils.h +++ b/libvirt-utils.h @@ -22,6 +22,9 @@ #ifndef __LIBVIRT_UTILS_H__ # define __LIBVIRT_UTILS_H__ +# include <Python.h> +# include <libvirt/libvirt.h> + # define STREQ(a,b) (strcmp(a,b) == 0) # ifndef MIN @@ -135,6 +138,22 @@ int virReallocN(void *ptrptr, size_t size, size_t count) ATTRIBUTE_RETURN_CHECK ATTRIBUTE_NONNULL(1); void virFree(void *ptrptr) ATTRIBUTE_NONNULL(1); + +# if PY_MAJOR_VERSION > 2 +# define libvirt_PyString_Check PyUnicode_Check +# else +# define libvirt_PyString_Check PyString_Check +# endif + + +/* The two-statement sequence "Py_INCREF(Py_None); return Py_None;" + is so common that we encapsulate it here. Now, each use is simply + return VIR_PY_NONE; */ +#define VIR_PY_NONE (Py_INCREF (Py_None), Py_None) +#define VIR_PY_INT_FAIL (libvirt_intWrap(-1)) +#define VIR_PY_INT_SUCCESS (libvirt_intWrap(0)) + + /** * VIR_ALLOC: * @ptr: pointer to hold address of allocated memory @@ -216,4 +235,36 @@ void virTypedParamsClear(virTypedParameterPtr params, int nparams); void virTypedParamsFree(virTypedParameterPtr params, int nparams); # endif /* ! LIBVIR_CHECK_VERSION(1, 0, 2) */ +char * py_str(PyObject *obj); +PyObject * getPyVirTypedParameter(const virTypedParameter *params, + int nparams); +virTypedParameterPtr setPyVirTypedParameter(PyObject *info, + const virTypedParameter *params, + int nparams) +ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); + + +# if LIBVIR_CHECK_VERSION(1, 1, 0) +typedef struct { + const char *name; + int type; +} virPyTypedParamsHint; +typedef virPyTypedParamsHint *virPyTypedParamsHintPtr; + + +int virPyDictToTypedPramaOne(virTypedParameterPtr *params, + int *n, + int *max, + virPyTypedParamsHintPtr hints, + int nhints, + const char *keystr, + PyObject *value); +int virPyDictToTypedParams(PyObject *dict, + virTypedParameterPtr *ret_params, + int *ret_nparams, + virPyTypedParamsHintPtr hints, + int nhints) +ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3); +# endif /* LIBVIR_CHECK_VERSION(1, 1, 0) */ + #endif /* __LIBVIRT_UTILS_H__ */ -- 2.5.3

Follow the libvirt hacking guide and make the code consistent. Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-lxc-override.c | 3 +- libvirt-override.c | 305 +++++++++++++++++++++++++++++++++--------------- libvirt-qemu-override.c | 6 +- libvirt-utils.c | 25 ++-- typewrappers.c | 3 +- 5 files changed, 232 insertions(+), 110 deletions(-) diff --git a/libvirt-lxc-override.c b/libvirt-lxc-override.c index e0d3e60..cdfbef6 100644 --- a/libvirt-lxc-override.c +++ b/libvirt-lxc-override.c @@ -55,7 +55,8 @@ extern void initcygvirtmod_lxc(void); static PyObject * libvirt_lxc_virDomainLxcOpenNamespace(PyObject *self ATTRIBUTE_UNUSED, - PyObject *args) { + PyObject *args) +{ PyObject *py_retval; virDomainPtr domain; PyObject *pyobj_domain; diff --git a/libvirt-override.c b/libvirt-override.c index ff6f338..fa9b693 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -62,7 +62,8 @@ extern void initcygvirtmod(void); * number if some host CPUs are offline. */ static int -getPyNodeCPUCount(virConnectPtr conn) { +getPyNodeCPUCount(virConnectPtr conn) +{ int i_retval; virNodeInfo nodeinfo; @@ -89,7 +90,9 @@ getPyNodeCPUCount(virConnectPtr conn) { ************************************************************************/ static PyObject * -libvirt_virDomainBlockStats(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { +libvirt_virDomainBlockStats(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ virDomainPtr domain; PyObject *pyobj_domain; char * path; @@ -168,7 +171,8 @@ cleanup: } static PyObject * -libvirt_virDomainGetCPUStats(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) +libvirt_virDomainGetCPUStats(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) { virDomainPtr domain; PyObject *pyobj_domain, *totalbool; @@ -304,7 +308,9 @@ error: } static PyObject * -libvirt_virDomainInterfaceStats(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { +libvirt_virDomainInterfaceStats(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ virDomainPtr domain; PyObject *pyobj_domain; char * path; @@ -339,7 +345,9 @@ libvirt_virDomainInterfaceStats(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) } static PyObject * -libvirt_virDomainMemoryStats(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { +libvirt_virDomainMemoryStats(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ virDomainPtr domain; PyObject *pyobj_domain; unsigned int nr_stats; @@ -411,7 +419,8 @@ libvirt_virDomainMemoryStats(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { static PyObject * libvirt_virDomainGetSchedulerType(PyObject *self ATTRIBUTE_UNUSED, - PyObject *args) { + PyObject *args) +{ virDomainPtr domain; PyObject *pyobj_domain, *info; char *c_retval; @@ -1422,7 +1431,8 @@ cleanup: static PyObject * libvirt_virDomainGetVcpuPinInfo(PyObject *self ATTRIBUTE_UNUSED, - PyObject *args) { + PyObject *args) +{ virDomainPtr domain; PyObject *pyobj_domain, *pycpumaps = NULL; virDomainInfo dominfo; @@ -1771,7 +1781,8 @@ static PyObject *libvirt_virPythonErrorFuncHandler = NULL; static PyObject *libvirt_virPythonErrorFuncCtxt = NULL; static PyObject * -libvirt_virGetLastError(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED) +libvirt_virGetLastError(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args ATTRIBUTE_UNUSED) { virError *err; PyObject *info; @@ -1795,7 +1806,8 @@ libvirt_virGetLastError(PyObject *self ATTRIBUTE_UNUSED, PyObject *args ATTRIBUT } static PyObject * -libvirt_virConnGetLastError(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) +libvirt_virConnGetLastError(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) { virError *err; PyObject *info; @@ -1828,7 +1840,8 @@ libvirt_virConnGetLastError(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) } static void -libvirt_virErrorFuncHandler(ATTRIBUTE_UNUSED void *ctx, virErrorPtr err) +libvirt_virErrorFuncHandler(ATTRIBUTE_UNUSED void *ctx, + virErrorPtr err) { PyObject *list, *info; PyObject *result; @@ -1870,7 +1883,7 @@ libvirt_virErrorFuncHandler(ATTRIBUTE_UNUSED void *ctx, virErrorPtr err) static PyObject * libvirt_virRegisterErrorHandler(ATTRIBUTE_UNUSED PyObject * self, - PyObject * args) + PyObject * args) { PyObject *py_retval; PyObject *pyobj_f; @@ -1905,9 +1918,11 @@ libvirt_virRegisterErrorHandler(ATTRIBUTE_UNUSED PyObject * self, return py_retval; } -static int virConnectCredCallbackWrapper(virConnectCredentialPtr cred, - unsigned int ncred, - void *cbdata) { +static int +virConnectCredCallbackWrapper(virConnectCredentialPtr cred, + unsigned int ncred, + void *cbdata) +{ PyObject *list; PyObject *pycred; PyObject *pyauth = (PyObject *)cbdata; @@ -1988,7 +2003,9 @@ static int virConnectCredCallbackWrapper(virConnectCredentialPtr cred, static PyObject * -libvirt_virConnectOpenAuth(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { +libvirt_virConnectOpenAuth(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ PyObject *py_retval; virConnectPtr c_retval; char * name; @@ -2037,7 +2054,8 @@ libvirt_virConnectOpenAuth(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { ************************************************************************/ static PyObject * -libvirt_virGetVersion(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) +libvirt_virGetVersion(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) { char *type = NULL; unsigned long libVer, typeVer = 0; @@ -2172,7 +2190,8 @@ libvirt_virConnectGetLibVersion(PyObject *self ATTRIBUTE_UNUSED, static PyObject * libvirt_virConnectListDomainsID(PyObject *self ATTRIBUTE_UNUSED, - PyObject *args) { + PyObject *args) +{ PyObject *py_retval; int *ids = NULL, c_retval; size_t i; @@ -2265,7 +2284,8 @@ cleanup: static PyObject * libvirt_virConnectListDefinedDomains(PyObject *self ATTRIBUTE_UNUSED, - PyObject *args) { + PyObject *args) +{ PyObject *py_retval; char **names = NULL; int c_retval; @@ -2518,7 +2538,8 @@ cleanup: static PyObject * libvirt_virDomainRevertToSnapshot(PyObject *self ATTRIBUTE_UNUSED, - PyObject *args) { + PyObject *args) +{ int c_retval; virDomainSnapshotPtr snap; PyObject *pyobj_snap; @@ -2539,7 +2560,9 @@ libvirt_virDomainRevertToSnapshot(PyObject *self ATTRIBUTE_UNUSED, } static PyObject * -libvirt_virDomainGetInfo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { +libvirt_virDomainGetInfo(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ PyObject *py_retval; int c_retval; virDomainPtr domain; @@ -2566,7 +2589,8 @@ libvirt_virDomainGetInfo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { } static PyObject * -libvirt_virDomainGetState(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) +libvirt_virDomainGetState(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) { PyObject *py_retval; int c_retval; @@ -2595,7 +2619,9 @@ libvirt_virDomainGetState(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) } static PyObject * -libvirt_virDomainGetControlInfo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { +libvirt_virDomainGetControlInfo(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ PyObject *py_retval; int c_retval; virDomainPtr domain; @@ -2621,7 +2647,9 @@ libvirt_virDomainGetControlInfo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) } static PyObject * -libvirt_virDomainGetBlockInfo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { +libvirt_virDomainGetBlockInfo(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ PyObject *py_retval; int c_retval; virDomainPtr domain; @@ -2647,7 +2675,9 @@ libvirt_virDomainGetBlockInfo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { } static PyObject * -libvirt_virNodeGetInfo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { +libvirt_virNodeGetInfo(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ PyObject *py_retval; int c_retval; virConnectPtr conn; @@ -2676,7 +2706,9 @@ libvirt_virNodeGetInfo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { } static PyObject * -libvirt_virNodeGetSecurityModel(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { +libvirt_virNodeGetSecurityModel(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ PyObject *py_retval; int c_retval; virConnectPtr conn; @@ -2699,7 +2731,9 @@ libvirt_virNodeGetSecurityModel(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) } static PyObject * -libvirt_virDomainGetSecurityLabel(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { +libvirt_virDomainGetSecurityLabel(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ PyObject *py_retval; int c_retval; virDomainPtr dom; @@ -2783,7 +2817,9 @@ libvirt_virDomainGetSecurityLabelList(PyObject *self ATTRIBUTE_UNUSED, #endif /* LIBVIR_CHECK_VERSION(0, 10, 0) */ static PyObject * -libvirt_virDomainGetUUID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { +libvirt_virDomainGetUUID(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ PyObject *py_retval; unsigned char uuid[VIR_UUID_BUFLEN]; virDomainPtr domain; @@ -2809,7 +2845,8 @@ libvirt_virDomainGetUUID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { static PyObject * libvirt_virDomainGetUUIDString(PyObject *self ATTRIBUTE_UNUSED, - PyObject *args) { + PyObject *args) +{ PyObject *py_retval; char uuidstr[VIR_UUID_STRING_BUFLEN]; virDomainPtr dom; @@ -2835,7 +2872,9 @@ libvirt_virDomainGetUUIDString(PyObject *self ATTRIBUTE_UNUSED, } static PyObject * -libvirt_virDomainLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { +libvirt_virDomainLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ PyObject *py_retval; virDomainPtr c_retval; virConnectPtr conn; @@ -2860,7 +2899,8 @@ libvirt_virDomainLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { static PyObject * libvirt_virConnectListNetworks(PyObject *self ATTRIBUTE_UNUSED, - PyObject *args) { + PyObject *args) +{ PyObject *py_retval; char **names = NULL; int c_retval; @@ -2906,7 +2946,8 @@ libvirt_virConnectListNetworks(PyObject *self ATTRIBUTE_UNUSED, static PyObject * libvirt_virConnectListDefinedNetworks(PyObject *self ATTRIBUTE_UNUSED, - PyObject *args) { + PyObject *args) +{ PyObject *py_retval; char **names = NULL; int c_retval; @@ -3000,7 +3041,9 @@ cleanup: static PyObject * -libvirt_virNetworkGetUUID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { +libvirt_virNetworkGetUUID(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ PyObject *py_retval; unsigned char uuid[VIR_UUID_BUFLEN]; virNetworkPtr domain; @@ -3026,7 +3069,8 @@ libvirt_virNetworkGetUUID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { static PyObject * libvirt_virNetworkGetUUIDString(PyObject *self ATTRIBUTE_UNUSED, - PyObject *args) { + PyObject *args) +{ PyObject *py_retval; char uuidstr[VIR_UUID_STRING_BUFLEN]; virNetworkPtr net; @@ -3052,7 +3096,9 @@ libvirt_virNetworkGetUUIDString(PyObject *self ATTRIBUTE_UNUSED, } static PyObject * -libvirt_virNetworkLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { +libvirt_virNetworkLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ PyObject *py_retval; virNetworkPtr c_retval; virConnectPtr conn; @@ -3076,7 +3122,9 @@ libvirt_virNetworkLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) static PyObject * -libvirt_virDomainGetAutostart(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { +libvirt_virDomainGetAutostart(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ PyObject *py_retval; int c_retval, autostart; virDomainPtr domain; @@ -3099,7 +3147,9 @@ libvirt_virDomainGetAutostart(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { static PyObject * -libvirt_virNetworkGetAutostart(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { +libvirt_virNetworkGetAutostart(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ PyObject *py_retval; int c_retval, autostart; virNetworkPtr network; @@ -3121,7 +3171,8 @@ libvirt_virNetworkGetAutostart(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) } static PyObject * -libvirt_virNodeGetCellsFreeMemory(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) +libvirt_virNodeGetCellsFreeMemory(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) { PyObject *py_retval; PyObject *pyobj_conn; @@ -3158,7 +3209,8 @@ libvirt_virNodeGetCellsFreeMemory(PyObject *self ATTRIBUTE_UNUSED, PyObject *arg } static PyObject * -libvirt_virNodeGetCPUStats(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) +libvirt_virNodeGetCPUStats(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) { PyObject *ret = NULL; PyObject *key = NULL; @@ -3222,7 +3274,8 @@ error: } static PyObject * -libvirt_virNodeGetMemoryStats(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) +libvirt_virNodeGetMemoryStats(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) { PyObject *ret = NULL; PyObject *key = NULL; @@ -3287,7 +3340,8 @@ error: static PyObject * libvirt_virConnectListStoragePools(PyObject *self ATTRIBUTE_UNUSED, - PyObject *args) { + PyObject *args) +{ PyObject *py_retval; char **names = NULL; int c_retval; @@ -3341,7 +3395,8 @@ libvirt_virConnectListStoragePools(PyObject *self ATTRIBUTE_UNUSED, static PyObject * libvirt_virConnectListDefinedStoragePools(PyObject *self ATTRIBUTE_UNUSED, - PyObject *args) { + PyObject *args) +{ PyObject *py_retval; char **names = NULL; int c_retval; @@ -3443,7 +3498,8 @@ cleanup: static PyObject * libvirt_virStoragePoolListVolumes(PyObject *self ATTRIBUTE_UNUSED, - PyObject *args) { + PyObject *args) +{ PyObject *py_retval; char **names = NULL; int c_retval; @@ -3546,7 +3602,9 @@ cleanup: static PyObject * -libvirt_virStoragePoolGetAutostart(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { +libvirt_virStoragePoolGetAutostart(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ PyObject *py_retval; int c_retval, autostart; virStoragePoolPtr pool; @@ -3569,7 +3627,9 @@ libvirt_virStoragePoolGetAutostart(PyObject *self ATTRIBUTE_UNUSED, PyObject *ar } static PyObject * -libvirt_virStoragePoolGetInfo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { +libvirt_virStoragePoolGetInfo(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ PyObject *py_retval; int c_retval; virStoragePoolPtr pool; @@ -3601,7 +3661,9 @@ libvirt_virStoragePoolGetInfo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { static PyObject * -libvirt_virStorageVolGetInfo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { +libvirt_virStorageVolGetInfo(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ PyObject *py_retval; int c_retval; virStorageVolPtr pool; @@ -3629,7 +3691,9 @@ libvirt_virStorageVolGetInfo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { } static PyObject * -libvirt_virStoragePoolGetUUID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { +libvirt_virStoragePoolGetUUID(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ PyObject *py_retval; unsigned char uuid[VIR_UUID_BUFLEN]; virStoragePoolPtr pool; @@ -3656,7 +3720,8 @@ libvirt_virStoragePoolGetUUID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { static PyObject * libvirt_virStoragePoolGetUUIDString(PyObject *self ATTRIBUTE_UNUSED, - PyObject *args) { + PyObject *args) +{ PyObject *py_retval; char uuidstr[VIR_UUID_STRING_BUFLEN]; virStoragePoolPtr pool; @@ -3681,7 +3746,9 @@ libvirt_virStoragePoolGetUUIDString(PyObject *self ATTRIBUTE_UNUSED, } static PyObject * -libvirt_virStoragePoolLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { +libvirt_virStoragePoolLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ PyObject *py_retval; virStoragePoolPtr c_retval; virConnectPtr conn; @@ -3705,7 +3772,8 @@ libvirt_virStoragePoolLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, PyObject *ar static PyObject * libvirt_virNodeListDevices(PyObject *self ATTRIBUTE_UNUSED, - PyObject *args) { + PyObject *args) +{ PyObject *py_retval; char **names = NULL; int c_retval; @@ -3801,7 +3869,8 @@ cleanup: static PyObject * libvirt_virNodeDeviceListCaps(PyObject *self ATTRIBUTE_UNUSED, - PyObject *args) { + PyObject *args) +{ PyObject *py_retval; char **names = NULL; int c_retval; @@ -3844,7 +3913,9 @@ libvirt_virNodeDeviceListCaps(PyObject *self ATTRIBUTE_UNUSED, } static PyObject * -libvirt_virSecretGetUUID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { +libvirt_virSecretGetUUID(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ PyObject *py_retval; unsigned char uuid[VIR_UUID_BUFLEN]; virSecretPtr secret; @@ -3870,7 +3941,8 @@ libvirt_virSecretGetUUID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { static PyObject * libvirt_virSecretGetUUIDString(PyObject *self ATTRIBUTE_UNUSED, - PyObject *args) { + PyObject *args) +{ PyObject *py_retval; char uuidstr[VIR_UUID_STRING_BUFLEN]; virSecretPtr dom; @@ -3896,7 +3968,9 @@ libvirt_virSecretGetUUIDString(PyObject *self ATTRIBUTE_UNUSED, } static PyObject * -libvirt_virSecretLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { +libvirt_virSecretLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ PyObject *py_retval; virSecretPtr c_retval; virConnectPtr conn; @@ -3921,7 +3995,8 @@ libvirt_virSecretLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { static PyObject * libvirt_virConnectListSecrets(PyObject *self ATTRIBUTE_UNUSED, - PyObject *args) { + PyObject *args) +{ PyObject *py_retval; char **uuids = NULL; virConnectPtr conn; @@ -4014,7 +4089,8 @@ cleanup: static PyObject * libvirt_virSecretGetValue(PyObject *self ATTRIBUTE_UNUSED, - PyObject *args) { + PyObject *args) +{ PyObject *py_retval; unsigned char *c_retval; size_t size; @@ -4042,7 +4118,8 @@ libvirt_virSecretGetValue(PyObject *self ATTRIBUTE_UNUSED, static PyObject * libvirt_virSecretSetValue(PyObject *self ATTRIBUTE_UNUSED, - PyObject *args) { + PyObject *args) +{ PyObject *py_retval; int c_retval; virSecretPtr secret; @@ -4066,7 +4143,9 @@ libvirt_virSecretSetValue(PyObject *self ATTRIBUTE_UNUSED, } static PyObject * -libvirt_virNWFilterGetUUID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { +libvirt_virNWFilterGetUUID(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ PyObject *py_retval; unsigned char uuid[VIR_UUID_BUFLEN]; virNWFilterPtr nwfilter; @@ -4092,7 +4171,8 @@ libvirt_virNWFilterGetUUID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { static PyObject * libvirt_virNWFilterGetUUIDString(PyObject *self ATTRIBUTE_UNUSED, - PyObject *args) { + PyObject *args) +{ PyObject *py_retval; char uuidstr[VIR_UUID_STRING_BUFLEN]; virNWFilterPtr nwfilter; @@ -4118,7 +4198,9 @@ libvirt_virNWFilterGetUUIDString(PyObject *self ATTRIBUTE_UNUSED, } static PyObject * -libvirt_virNWFilterLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { +libvirt_virNWFilterLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ PyObject *py_retval; virNWFilterPtr c_retval; virConnectPtr conn; @@ -4143,7 +4225,8 @@ libvirt_virNWFilterLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) static PyObject * libvirt_virConnectListNWFilters(PyObject *self ATTRIBUTE_UNUSED, - PyObject *args) { + PyObject *args) +{ PyObject *py_retval; char **uuids = NULL; virConnectPtr conn; @@ -4236,7 +4319,8 @@ cleanup: static PyObject * libvirt_virConnectListInterfaces(PyObject *self ATTRIBUTE_UNUSED, - PyObject *args) { + PyObject *args) +{ PyObject *py_retval; char **names = NULL; int c_retval; @@ -4290,7 +4374,8 @@ libvirt_virConnectListInterfaces(PyObject *self ATTRIBUTE_UNUSED, static PyObject * libvirt_virConnectListDefinedInterfaces(PyObject *self ATTRIBUTE_UNUSED, - PyObject *args) { + PyObject *args) +{ PyObject *py_retval; char **names = NULL; int c_retval; @@ -4394,7 +4479,8 @@ cleanup: static PyObject * libvirt_virConnectBaselineCPU(PyObject *self ATTRIBUTE_UNUSED, - PyObject *args) { + PyObject *args) +{ PyObject *pyobj_conn; PyObject *list; virConnectPtr conn; @@ -4448,7 +4534,9 @@ libvirt_virConnectBaselineCPU(PyObject *self ATTRIBUTE_UNUSED, static PyObject * -libvirt_virDomainGetJobInfo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { +libvirt_virDomainGetJobInfo(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ PyObject *py_retval; int c_retval; virDomainPtr domain; @@ -4483,7 +4571,8 @@ libvirt_virDomainGetJobInfo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { #if LIBVIR_CHECK_VERSION(1, 0, 3) static PyObject * -libvirt_virDomainGetJobStats(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) +libvirt_virDomainGetJobStats(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) { PyObject *pyobj_domain; virDomainPtr domain; @@ -4894,7 +4983,8 @@ static PyObject *libvirt_module = NULL; static PyObject *libvirt_dict = NULL; static PyObject * -getLibvirtModuleObject(void) { +getLibvirtModuleObject(void) +{ if (libvirt_module) return libvirt_module; @@ -4911,7 +5001,8 @@ getLibvirtModuleObject(void) { } static PyObject * -getLibvirtDictObject(void) { +getLibvirtDictObject(void) +{ if (libvirt_dict) return libvirt_dict; @@ -5037,7 +5128,7 @@ libvirt_virConnectDomainEventRegister(ATTRIBUTE_UNUSED PyObject *self, } static PyObject * -libvirt_virConnectDomainEventDeregister(ATTRIBUTE_UNUSED PyObject *self, +libvirt_virConnectDomainEventDeregister(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { PyObject *py_retval; @@ -5086,11 +5177,11 @@ static char *removeTimeoutName; #define NAME(fn) ( fn ## Name ? fn ## Name : # fn ) static int -libvirt_virEventAddHandleFunc (int fd, - int event, - virEventHandleCallback cb, - void *opaque, - virFreeCallback ff) +libvirt_virEventAddHandleFunc(int fd, + int event, + virEventHandleCallback cb, + void *opaque, + virFreeCallback ff) { PyObject *result; PyObject *python_cb; @@ -5144,7 +5235,8 @@ cleanup: } static void -libvirt_virEventUpdateHandleFunc(int watch, int event) +libvirt_virEventUpdateHandleFunc(int watch, + int event) { PyObject *result; PyObject *pyobj_args; @@ -5268,7 +5360,8 @@ cleanup: } static void -libvirt_virEventUpdateTimeoutFunc(int timer, int timeout) +libvirt_virEventUpdateTimeoutFunc(int timer, + int timeout) { PyObject *result = NULL; PyObject *pyobj_args; @@ -5332,7 +5425,7 @@ libvirt_virEventRemoveTimeoutFunc(int timer) } static PyObject * -libvirt_virEventRegisterImpl(ATTRIBUTE_UNUSED PyObject * self, +libvirt_virEventRegisterImpl(PyObject * self ATTRIBUTE_UNUSED, PyObject * args) { /* Unref the previously-registered impl (if any) */ @@ -6596,7 +6689,7 @@ libvirt_virConnectDomainEventDeviceAddedCallback(virConnectPtr conn ATTRIBUTE_UN #endif /* VIR_DOMAIN_EVENT_ID_DEVICE_ADDED */ static PyObject * -libvirt_virConnectDomainEventRegisterAny(ATTRIBUTE_UNUSED PyObject *self, +libvirt_virConnectDomainEventRegisterAny(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { PyObject *py_retval; /* return value */ @@ -6722,7 +6815,7 @@ libvirt_virConnectDomainEventRegisterAny(ATTRIBUTE_UNUSED PyObject *self, } static PyObject * -libvirt_virConnectDomainEventDeregisterAny(ATTRIBUTE_UNUSED PyObject *self, +libvirt_virConnectDomainEventDeregisterAny(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { PyObject *py_retval; @@ -6871,9 +6964,9 @@ libvirt_virConnectNetworkEventRegisterAny(PyObject *self ATTRIBUTE_UNUSED, return py_retval; } -static PyObject -*libvirt_virConnectNetworkEventDeregisterAny(PyObject *self ATTRIBUTE_UNUSED, - PyObject *args) +static PyObject * +libvirt_virConnectNetworkEventDeregisterAny(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) { PyObject *py_retval; PyObject *pyobj_conn; @@ -6939,7 +7032,7 @@ libvirt_virConnectCloseCallbackDispatch(virConnectPtr conn ATTRIBUTE_UNUSED, } static PyObject * -libvirt_virConnectRegisterCloseCallback(ATTRIBUTE_UNUSED PyObject * self, +libvirt_virConnectRegisterCloseCallback(PyObject * self ATTRIBUTE_UNUSED, PyObject * args) { PyObject *py_retval; /* return value */ @@ -6977,7 +7070,7 @@ libvirt_virConnectRegisterCloseCallback(ATTRIBUTE_UNUSED PyObject * self, } static PyObject * -libvirt_virConnectUnregisterCloseCallback(ATTRIBUTE_UNUSED PyObject * self, +libvirt_virConnectUnregisterCloseCallback(PyObject * self ATTRIBUTE_UNUSED, PyObject * args) { PyObject *py_retval; @@ -7232,7 +7325,9 @@ libvirt_virDomainMigrateGetCompressionCache(PyObject *self ATTRIBUTE_UNUSED, #endif /* LIBVIR_CHECK_VERSION(1, 0, 3) */ static PyObject * -libvirt_virDomainMigrateGetMaxSpeed(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { +libvirt_virDomainMigrateGetMaxSpeed(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ PyObject *py_retval; int c_retval; unsigned long bandwidth; @@ -7322,7 +7417,8 @@ libvirt_virDomainMigrateToURI3(PyObject *self ATTRIBUTE_UNUSED, static PyObject * libvirt_virDomainBlockPeek(PyObject *self ATTRIBUTE_UNUSED, - PyObject *args) { + PyObject *args) +{ PyObject *py_retval = NULL; int c_retval; virDomainPtr domain; @@ -7360,7 +7456,8 @@ cleanup: static PyObject * libvirt_virDomainMemoryPeek(PyObject *self ATTRIBUTE_UNUSED, - PyObject *args) { + PyObject *args) +{ PyObject *py_retval = NULL; int c_retval; virDomainPtr domain; @@ -7591,7 +7688,9 @@ error: #if LIBVIR_CHECK_VERSION(1, 1, 1) static PyObject * -libvirt_virDomainCreateWithFiles(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { +libvirt_virDomainCreateWithFiles(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ PyObject *py_retval = NULL; int c_retval; virDomainPtr domain; @@ -7636,7 +7735,9 @@ cleanup: static PyObject * -libvirt_virDomainCreateXMLWithFiles(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { +libvirt_virDomainCreateXMLWithFiles(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ PyObject *py_retval = NULL; virDomainPtr c_retval; virConnectPtr conn; @@ -7684,7 +7785,9 @@ cleanup: #if LIBVIR_CHECK_VERSION(1, 2, 5) static PyObject * -libvirt_virDomainFSFreeze(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { +libvirt_virDomainFSFreeze(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ PyObject *py_retval = NULL; int c_retval; virDomainPtr domain; @@ -7730,7 +7833,9 @@ cleanup: static PyObject * -libvirt_virDomainFSThaw(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { +libvirt_virDomainFSThaw(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ PyObject *py_retval = NULL; int c_retval; virDomainPtr domain; @@ -7775,7 +7880,9 @@ libvirt_virDomainFSThaw(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { } static PyObject * -libvirt_virDomainGetTime(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { +libvirt_virDomainGetTime(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ PyObject *py_retval = NULL; PyObject *dict = NULL; PyObject *pyobj_domain, *pyobj_seconds, *pyobj_nseconds; @@ -7821,7 +7928,9 @@ libvirt_virDomainGetTime(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { static PyObject * -libvirt_virDomainSetTime(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { +libvirt_virDomainSetTime(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ PyObject *py_retval = NULL; PyObject *pyobj_domain; PyObject *pyobj_seconds; @@ -7874,7 +7983,8 @@ libvirt_virDomainSetTime(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { #if LIBVIR_CHECK_VERSION(1, 2, 6) static PyObject * libvirt_virNodeGetFreePages(PyObject *self ATTRIBUTE_UNUSED, - PyObject *args) { + PyObject *args) +{ PyObject *py_retval = NULL; PyObject *pyobj_conn; PyObject *pyobj_pagesize; @@ -8201,7 +8311,8 @@ libvirt_virDomainListGetStats(PyObject *self ATTRIBUTE_UNUSED, static PyObject * -libvirt_virDomainBlockCopy(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) +libvirt_virDomainBlockCopy(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) { PyObject *pyobj_dom = NULL; PyObject *pyobj_dict = NULL; @@ -8237,7 +8348,7 @@ libvirt_virDomainBlockCopy(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) #if LIBVIR_CHECK_VERSION(1, 2, 9) static PyObject * libvirt_virNodeAllocPages(PyObject *self ATTRIBUTE_UNUSED, - PyObject *args) + PyObject *args) { PyObject *pyobj_conn; PyObject *pyobj_pages; @@ -8301,7 +8412,9 @@ libvirt_virNodeAllocPages(PyObject *self ATTRIBUTE_UNUSED, #if LIBVIR_CHECK_VERSION(1, 2, 11) static PyObject * -libvirt_virDomainGetFSInfo(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { +libvirt_virDomainGetFSInfo(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) +{ virDomainPtr domain; PyObject *pyobj_domain; unsigned int flags; diff --git a/libvirt-qemu-override.c b/libvirt-qemu-override.c index c082324..d73f9bf 100644 --- a/libvirt-qemu-override.c +++ b/libvirt-qemu-override.c @@ -125,7 +125,8 @@ libvirt_qemu_lookupPythonFunc(const char *funcname) static PyObject * libvirt_qemu_virDomainQemuMonitorCommand(PyObject *self ATTRIBUTE_UNUSED, - PyObject *args) { + PyObject *args) +{ PyObject *py_retval; char *result = NULL; virDomainPtr domain; @@ -155,7 +156,8 @@ libvirt_qemu_virDomainQemuMonitorCommand(PyObject *self ATTRIBUTE_UNUSED, #if LIBVIR_CHECK_VERSION(0, 10, 0) static PyObject * -libvirt_qemu_virDomainQemuAgentCommand(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) +libvirt_qemu_virDomainQemuAgentCommand(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) { PyObject *py_retval; char *result = NULL; diff --git a/libvirt-utils.c b/libvirt-utils.c index 651d74f..2dfffbc 100644 --- a/libvirt-utils.c +++ b/libvirt-utils.c @@ -46,8 +46,9 @@ * * Returns -1 on failure to allocate, zero on success */ -int virAlloc(void *ptrptr, - size_t size) +int +virAlloc(void *ptrptr, + size_t size) { *(void **)ptrptr = calloc(1, size); if (*(void **)ptrptr == NULL) { @@ -69,9 +70,10 @@ int virAlloc(void *ptrptr, * * Returns -1 on failure to allocate, zero on success */ -int virAllocN(void *ptrptr, - size_t size, - size_t count) +int +virAllocN(void *ptrptr, + size_t size, + size_t count) { *(void**)ptrptr = calloc(count, size); if (*(void**)ptrptr == NULL) { @@ -94,9 +96,10 @@ int virAllocN(void *ptrptr, * * Returns -1 on failure to allocate, zero on success */ -int virReallocN(void *ptrptr, - size_t size, - size_t count) +int +virReallocN(void *ptrptr, + size_t size, + size_t count) { void *tmp; @@ -121,7 +124,8 @@ int virReallocN(void *ptrptr, * the 'ptrptr' variable. After release, 'ptrptr' will be * updated to point to NULL. */ -void virFree(void *ptrptr) +void +virFree(void *ptrptr) { int save_errno = errno; @@ -131,7 +135,8 @@ void virFree(void *ptrptr) } -int virFileClose(int *fdptr) +int +virFileClose(int *fdptr) { int saved_errno = 0; int rc = 0; diff --git a/typewrappers.c b/typewrappers.c index 5399fb7..a164a11 100644 --- a/typewrappers.c +++ b/typewrappers.c @@ -386,7 +386,8 @@ libvirt_charPtrUnwrap(PyObject *obj, char **str) return ret && *str ? 0 : -1; } -int libvirt_charPtrSizeUnwrap(PyObject *obj, char **str, Py_ssize_t *size) +int +libvirt_charPtrSizeUnwrap(PyObject *obj, char **str, Py_ssize_t *size) { int ret; #if PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION <= 4 -- 2.5.3

On 09/24/2015 10:01 AM, Pavel Hrdina wrote:
Follow the libvirt hacking guide and make the code consistent.
Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-lxc-override.c | 3 +- libvirt-override.c | 305 +++++++++++++++++++++++++++++++++--------------- libvirt-qemu-override.c | 6 +- libvirt-utils.c | 25 ++-- typewrappers.c | 3 +- 5 files changed, 232 insertions(+), 110 deletions(-)
[...]
static void -libvirt_virEventUpdateTimeoutFunc(int timer, int timeout) +libvirt_virEventUpdateTimeoutFunc(int timer, + int timeout) { PyObject *result = NULL; PyObject *pyobj_args; @@ -5332,7 +5425,7 @@ libvirt_virEventRemoveTimeoutFunc(int timer) }
static PyObject * -libvirt_virEventRegisterImpl(ATTRIBUTE_UNUSED PyObject * self, +libvirt_virEventRegisterImpl(PyObject * self ATTRIBUTE_UNUSED, PyObject * args)
There's an extra space between * and self and args... May as well be consistent while you're at it.
{ /* Unref the previously-registered impl (if any) */ @@ -6596,7 +6689,7 @@ libvirt_virConnectDomainEventDeviceAddedCallback(virConnectPtr conn ATTRIBUTE_UN #endif /* VIR_DOMAIN_EVENT_ID_DEVICE_ADDED */
static PyObject * -libvirt_virConnectDomainEventRegisterAny(ATTRIBUTE_UNUSED PyObject *self, +libvirt_virConnectDomainEventRegisterAny(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { PyObject *py_retval; /* return value */ @@ -6722,7 +6815,7 @@ libvirt_virConnectDomainEventRegisterAny(ATTRIBUTE_UNUSED PyObject *self, }
static PyObject * -libvirt_virConnectDomainEventDeregisterAny(ATTRIBUTE_UNUSED PyObject *self, +libvirt_virConnectDomainEventDeregisterAny(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { PyObject *py_retval; @@ -6871,9 +6964,9 @@ libvirt_virConnectNetworkEventRegisterAny(PyObject *self ATTRIBUTE_UNUSED, return py_retval; }
-static PyObject -*libvirt_virConnectNetworkEventDeregisterAny(PyObject *self ATTRIBUTE_UNUSED, - PyObject *args) +static PyObject * +libvirt_virConnectNetworkEventDeregisterAny(PyObject *self ATTRIBUTE_UNUSED, + PyObject *args) { PyObject *py_retval; PyObject *pyobj_conn; @@ -6939,7 +7032,7 @@ libvirt_virConnectCloseCallbackDispatch(virConnectPtr conn ATTRIBUTE_UNUSED, }
static PyObject * -libvirt_virConnectRegisterCloseCallback(ATTRIBUTE_UNUSED PyObject * self, +libvirt_virConnectRegisterCloseCallback(PyObject * self ATTRIBUTE_UNUSED, PyObject * args)
Ditto about spaces
{ PyObject *py_retval; /* return value */ @@ -6977,7 +7070,7 @@ libvirt_virConnectRegisterCloseCallback(ATTRIBUTE_UNUSED PyObject * self, }
static PyObject * -libvirt_virConnectUnregisterCloseCallback(ATTRIBUTE_UNUSED PyObject * self, +libvirt_virConnectUnregisterCloseCallback(PyObject * self ATTRIBUTE_UNUSED, PyObject * args)
again
{ PyObject *py_retval; @@ -7232,7 +7325,9 @@ libvirt_virDomainMigrateGetCompressionCache(PyObject *self ATTRIBUTE_UNUSED, #endif /* LIBVIR_CHECK_VERSION(1, 0, 3) */
[...]
--- a/typewrappers.c +++ b/typewrappers.c @@ -386,7 +386,8 @@ libvirt_charPtrUnwrap(PyObject *obj, char **str) return ret && *str ? 0 : -1; }
-int libvirt_charPtrSizeUnwrap(PyObject *obj, char **str, Py_ssize_t *size) +int +libvirt_charPtrSizeUnwrap(PyObject *obj, char **str, Py_ssize_t *size)
You didn't follow the model of one line per arg John
{ int ret; #if PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION <= 4

Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-lxc-override.c | 2 +- libvirt-override.c | 112 ++++++++++++++++++++++++------------------------ libvirt-qemu-override.c | 2 +- libvirt-utils.c | 4 +- 4 files changed, 60 insertions(+), 60 deletions(-) diff --git a/libvirt-lxc-override.c b/libvirt-lxc-override.c index cdfbef6..2a3619e 100644 --- a/libvirt-lxc-override.c +++ b/libvirt-lxc-override.c @@ -94,7 +94,7 @@ libvirt_lxc_virDomainLxcOpenNamespace(PyObject *self ATTRIBUTE_UNUSED, VIR_FREE(fdlist); return py_retval; -error: + error: for (i = 0; i < c_retval; i++) { VIR_FORCE_CLOSE(fdlist[i]); } diff --git a/libvirt-override.c b/libvirt-override.c index fa9b693..4c5590a 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -165,7 +165,7 @@ libvirt_virDomainBlockStatsFlags(PyObject *self ATTRIBUTE_UNUSED, ret = getPyVirTypedParameter(params, nparams); -cleanup: + cleanup: virTypedParamsFree(params, nparams); return ret; } @@ -301,7 +301,7 @@ libvirt_virDomainGetCPUStats(PyObject *self ATTRIBUTE_UNUSED, virTypedParamsFree(params, sumparams); return ret; -error: + error: virTypedParamsFree(params, sumparams); Py_DECREF(ret); return error; @@ -491,7 +491,7 @@ libvirt_virDomainGetSchedulerParameters(PyObject *self ATTRIBUTE_UNUSED, ret = getPyVirTypedParameter(params, nparams); -cleanup: + cleanup: virTypedParamsFree(params, nparams); return ret; } @@ -539,7 +539,7 @@ libvirt_virDomainGetSchedulerParametersFlags(PyObject *self ATTRIBUTE_UNUSED, ret = getPyVirTypedParameter(params, nparams); -cleanup: + cleanup: virTypedParamsFree(params, nparams); return ret; } @@ -612,7 +612,7 @@ libvirt_virDomainSetSchedulerParameters(PyObject *self ATTRIBUTE_UNUSED, ret = VIR_PY_INT_SUCCESS; -cleanup: + cleanup: virTypedParamsFree(params, nparams); virTypedParamsFree(new_params, size); return ret; @@ -688,7 +688,7 @@ libvirt_virDomainSetSchedulerParametersFlags(PyObject *self ATTRIBUTE_UNUSED, ret = VIR_PY_INT_SUCCESS; -cleanup: + cleanup: virTypedParamsFree(params, nparams); virTypedParamsFree(new_params, nparams); return ret; @@ -762,7 +762,7 @@ libvirt_virDomainSetBlkioParameters(PyObject *self ATTRIBUTE_UNUSED, ret = VIR_PY_INT_SUCCESS; -cleanup: + cleanup: virTypedParamsFree(params, nparams); virTypedParamsFree(new_params, size); return ret; @@ -809,7 +809,7 @@ libvirt_virDomainGetBlkioParameters(PyObject *self ATTRIBUTE_UNUSED, ret = getPyVirTypedParameter(params, nparams); -cleanup: + cleanup: virTypedParamsFree(params, nparams); return ret; } @@ -882,7 +882,7 @@ libvirt_virDomainSetMemoryParameters(PyObject *self ATTRIBUTE_UNUSED, ret = VIR_PY_INT_SUCCESS; -cleanup: + cleanup: virTypedParamsFree(params, nparams); virTypedParamsFree(new_params, size); return ret; @@ -929,7 +929,7 @@ libvirt_virDomainGetMemoryParameters(PyObject *self ATTRIBUTE_UNUSED, ret = getPyVirTypedParameter(params, nparams); -cleanup: + cleanup: virTypedParamsFree(params, nparams); return ret; } @@ -1002,7 +1002,7 @@ libvirt_virDomainSetNumaParameters(PyObject *self ATTRIBUTE_UNUSED, ret = VIR_PY_INT_SUCCESS; -cleanup: + cleanup: virTypedParamsFree(params, nparams); virTypedParamsFree(new_params, size); return ret; @@ -1049,7 +1049,7 @@ libvirt_virDomainGetNumaParameters(PyObject *self ATTRIBUTE_UNUSED, ret = getPyVirTypedParameter(params, nparams); -cleanup: + cleanup: virTypedParamsFree(params, nparams); return ret; } @@ -1123,7 +1123,7 @@ libvirt_virDomainSetInterfaceParameters(PyObject *self ATTRIBUTE_UNUSED, ret = VIR_PY_INT_SUCCESS; -cleanup: + cleanup: virTypedParamsFree(params, nparams); virTypedParamsFree(new_params, size); return ret; @@ -1171,7 +1171,7 @@ libvirt_virDomainGetInterfaceParameters(PyObject *self ATTRIBUTE_UNUSED, ret = getPyVirTypedParameter(params, nparams); -cleanup: + cleanup: virTypedParamsFree(params, nparams); return ret; } @@ -1291,7 +1291,7 @@ libvirt_virDomainGetVcpus(PyObject *self ATTRIBUTE_UNUSED, return pyretval; -cleanup: + cleanup: VIR_FREE(cpuinfo); VIR_FREE(cpumap); Py_XDECREF(pyretval); @@ -1360,7 +1360,7 @@ libvirt_virDomainPinVcpu(PyObject *self ATTRIBUTE_UNUSED, } ret = VIR_PY_INT_SUCCESS; -cleanup: + cleanup: VIR_FREE(cpumap); return ret; } @@ -1424,7 +1424,7 @@ libvirt_virDomainPinVcpuFlags(PyObject *self ATTRIBUTE_UNUSED, } ret = VIR_PY_INT_SUCCESS; -cleanup: + cleanup: VIR_FREE(cpumap); return ret; } @@ -1486,7 +1486,7 @@ libvirt_virDomainGetVcpuPinInfo(PyObject *self ATTRIBUTE_UNUSED, return pycpumaps; -cleanup: + cleanup: VIR_FREE(cpumaps); Py_XDECREF(pycpumaps); @@ -1695,7 +1695,7 @@ libvirt_virDomainGetIOThreadInfo(PyObject *self ATTRIBUTE_UNUSED, py_retval = py_iothrinfo; py_iothrinfo = NULL; -cleanup: + cleanup: if (niothreads > 0) { for (i = 0; i < niothreads; i++) virDomainIOThreadInfoFree(iothrinfo[i]); @@ -1764,7 +1764,7 @@ libvirt_virDomainPinIOThread(PyObject *self ATTRIBUTE_UNUSED, } ret = VIR_PY_INT_SUCCESS; -cleanup: + cleanup: VIR_FREE(cpumap); return ret; } @@ -2146,7 +2146,7 @@ libvirt_virConnectGetCPUModelNames(PyObject *self ATTRIBUTE_UNUSED, PyList_SET_ITEM(rv, i, str); } -done: + done: if (models) { for (i = 0; i < c_retval; i++) VIR_FREE(models[i]); @@ -2155,7 +2155,7 @@ done: return rv; -error: + error: Py_XDECREF(rv); rv = NULL; goto done; @@ -2273,7 +2273,7 @@ libvirt_virConnectListAllDomains(PyObject *self ATTRIBUTE_UNUSED, doms[i] = NULL; } -cleanup: + cleanup: for (i = 0; i < c_retval; i++) if (doms[i]) virDomainFree(doms[i]); @@ -2378,7 +2378,7 @@ libvirt_virDomainSnapshotListNames(PyObject *self ATTRIBUTE_UNUSED, VIR_FREE(names[i]); } -cleanup: + cleanup: for (i = 0; i < c_retval; i++) VIR_FREE(names[i]); VIR_FREE(names); @@ -2424,7 +2424,7 @@ libvirt_virDomainListAllSnapshots(PyObject *self ATTRIBUTE_UNUSED, snaps[i] = NULL; } -cleanup: + cleanup: for (i = 0; i < c_retval; i++) if (snaps[i]) virDomainSnapshotFree(snaps[i]); @@ -2481,7 +2481,7 @@ libvirt_virDomainSnapshotListChildrenNames(PyObject *self ATTRIBUTE_UNUSED, VIR_FREE(names[i]); } -cleanup: + cleanup: for (i = 0; i < c_retval; i++) VIR_FREE(names[i]); VIR_FREE(names); @@ -2527,7 +2527,7 @@ libvirt_virDomainSnapshotListAllChildren(PyObject *self ATTRIBUTE_UNUSED, snaps[i] = NULL; } -cleanup: + cleanup: for (i = 0; i < c_retval; i++) if (snaps[i]) virDomainSnapshotFree(snaps[i]); @@ -3030,7 +3030,7 @@ libvirt_virConnectListAllNetworks(PyObject *self ATTRIBUTE_UNUSED, nets[i] = NULL; } -cleanup: + cleanup: for (i = 0; i < c_retval; i++) if (nets[i]) virNetworkFree(nets[i]); @@ -3266,7 +3266,7 @@ libvirt_virNodeGetCPUStats(PyObject *self ATTRIBUTE_UNUSED, VIR_FREE(stats); return ret; -error: + error: VIR_FREE(stats); Py_XDECREF(key); Py_XDECREF(val); @@ -3331,7 +3331,7 @@ libvirt_virNodeGetMemoryStats(PyObject *self ATTRIBUTE_UNUSED, VIR_FREE(stats); return ret; -error: + error: VIR_FREE(stats); Py_XDECREF(key); Py_XDECREF(val); @@ -3487,7 +3487,7 @@ libvirt_virConnectListAllStoragePools(PyObject *self ATTRIBUTE_UNUSED, pools[i] = NULL; } -cleanup: + cleanup: for (i = 0; i < c_retval; i++) if (pools[i]) virStoragePoolFree(pools[i]); @@ -3591,7 +3591,7 @@ libvirt_virStoragePoolListAllVolumes(PyObject *self ATTRIBUTE_UNUSED, vols[i] = NULL; } -cleanup: + cleanup: for (i = 0; i < c_retval; i++) if (vols[i]) virStorageVolFree(vols[i]); @@ -3858,7 +3858,7 @@ libvirt_virConnectListAllNodeDevices(PyObject *self ATTRIBUTE_UNUSED, devices[i] = NULL; } -cleanup: + cleanup: for (i = 0; i < c_retval; i++) if (devices[i]) virNodeDeviceFree(devices[i]); @@ -4078,7 +4078,7 @@ libvirt_virConnectListAllSecrets(PyObject *self ATTRIBUTE_UNUSED, secrets[i] = NULL; } -cleanup: + cleanup: for (i = 0; i < c_retval; i++) if (secrets[i]) virSecretFree(secrets[i]); @@ -4308,7 +4308,7 @@ libvirt_virConnectListAllNWFilters(PyObject *self ATTRIBUTE_UNUSED, filters[i] = NULL; } -cleanup: + cleanup: for (i = 0; i < c_retval; i++) if (filters[i]) virNWFilterFree(filters[i]); @@ -4468,7 +4468,7 @@ libvirt_virConnectListAllInterfaces(PyObject *self ATTRIBUTE_UNUSED, ifaces[i] = NULL; } -cleanup: + cleanup: for (i = 0; i < c_retval; i++) if (ifaces[i]) virInterfaceFree(ifaces[i]); @@ -4604,7 +4604,7 @@ libvirt_virDomainGetJobStats(PyObject *self ATTRIBUTE_UNUSED, goto cleanup; } -cleanup: + cleanup: virTypedParamsFree(params, nparams); if (dict) return dict; @@ -4667,7 +4667,7 @@ libvirt_virDomainGetBlockJobInfo(PyObject *self ATTRIBUTE_UNUSED, return dict; -error: + error: Py_DECREF(dict); Py_XDECREF(type); Py_XDECREF(bandwidth); @@ -4744,7 +4744,7 @@ libvirt_virDomainSetBlockIoTune(PyObject *self ATTRIBUTE_UNUSED, ret = VIR_PY_INT_SUCCESS; -cleanup: + cleanup: virTypedParamsFree(params, nparams); virTypedParamsFree(new_params, size); return ret; @@ -4792,7 +4792,7 @@ libvirt_virDomainGetBlockIoTune(PyObject *self ATTRIBUTE_UNUSED, ret = getPyVirTypedParameter(params, nparams); -cleanup: + cleanup: virTypedParamsFree(params, nparams); return ret; } @@ -4841,7 +4841,7 @@ libvirt_virDomainGetDiskErrors(PyObject *self ATTRIBUTE_UNUSED, libvirt_intWrap(disks[i].error)); } -cleanup: + cleanup: if (disks) { for (i = 0; i < count; i++) VIR_FREE(disks[i].disk); @@ -4957,7 +4957,7 @@ libvirt_virDomainInterfaceAddresses(PyObject *self ATTRIBUTE_UNUSED, } } -cleanup: + cleanup: if (ifaces && ifaces_count > 0) { for (i = 0; i < ifaces_count; i++) { virDomainInterfaceFree(ifaces[i]); @@ -4967,7 +4967,7 @@ cleanup: return py_retval; -error: + error: Py_XDECREF(py_retval); py_retval = NULL; goto cleanup; @@ -5228,7 +5228,7 @@ libvirt_virEventAddHandleFunc(int fd, Py_XDECREF(result); Py_DECREF(pyobj_args); -cleanup: + cleanup: LIBVIRT_RELEASE_THREAD_STATE; return retval; @@ -5354,7 +5354,7 @@ libvirt_virEventAddTimeoutFunc(int timeout, Py_XDECREF(result); Py_DECREF(pyobj_args); -cleanup: + cleanup: LIBVIRT_RELEASE_THREAD_STATE; return retval; } @@ -5579,7 +5579,7 @@ libvirt_virEventHandleCallback(int watch, Py_DECREF(pyobj_ret); } -cleanup: + cleanup: LIBVIRT_RELEASE_THREAD_STATE; } @@ -5646,7 +5646,7 @@ libvirt_virEventTimeoutCallback(int timer, Py_DECREF(pyobj_ret); } -cleanup: + cleanup: LIBVIRT_RELEASE_THREAD_STATE; } @@ -7449,7 +7449,7 @@ libvirt_virDomainBlockPeek(PyObject *self ATTRIBUTE_UNUSED, py_retval = libvirt_charPtrSizeWrap(buf, size); -cleanup: + cleanup: VIR_FREE(buf); return py_retval; } @@ -7487,7 +7487,7 @@ libvirt_virDomainMemoryPeek(PyObject *self ATTRIBUTE_UNUSED, py_retval = libvirt_charPtrSizeWrap(buf, size); -cleanup: + cleanup: VIR_FREE(buf); return py_retval; } @@ -7561,7 +7561,7 @@ libvirt_virNodeSetMemoryParameters(PyObject *self ATTRIBUTE_UNUSED, ret = VIR_PY_INT_SUCCESS; -cleanup: + cleanup: virTypedParamsFree(params, nparams); virTypedParamsFree(new_params, nparams); return ret; @@ -7608,7 +7608,7 @@ libvirt_virNodeGetMemoryParameters(PyObject *self ATTRIBUTE_UNUSED, ret = getPyVirTypedParameter(params, nparams); -cleanup: + cleanup: virTypedParamsFree(params, nparams); return ret; } @@ -7671,10 +7671,10 @@ libvirt_virNodeGetCPUMap(PyObject *self ATTRIBUTE_UNUSED, PyTuple_SetItem(ret, 2, pyonline) < 0) goto error; -cleanup: + cleanup: VIR_FREE(cpumap); return ret; -error: + error: Py_XDECREF(ret); Py_XDECREF(pycpumap); Py_XDECREF(pyused); @@ -7728,7 +7728,7 @@ libvirt_virDomainCreateWithFiles(PyObject *self ATTRIBUTE_UNUSED, LIBVIRT_END_ALLOW_THREADS; py_retval = libvirt_intWrap((int) c_retval); -cleanup: + cleanup: VIR_FREE(files); return py_retval; } @@ -7776,7 +7776,7 @@ libvirt_virDomainCreateXMLWithFiles(PyObject *self ATTRIBUTE_UNUSED, LIBVIRT_END_ALLOW_THREADS; py_retval = libvirt_virDomainPtrWrap((virDomainPtr) c_retval); -cleanup: + cleanup: VIR_FREE(files); return py_retval; } @@ -7824,7 +7824,7 @@ libvirt_virDomainFSFreeze(PyObject *self ATTRIBUTE_UNUSED, py_retval = libvirt_intWrap(c_retval); -cleanup: + cleanup: for (j = 0 ; j < i ; j++) VIR_FREE(mountpoints[j]); VIR_FREE(mountpoints); diff --git a/libvirt-qemu-override.c b/libvirt-qemu-override.c index d73f9bf..ad1693b 100644 --- a/libvirt-qemu-override.c +++ b/libvirt-qemu-override.c @@ -243,7 +243,7 @@ libvirt_qemu_virConnectDomainQemuMonitorEventCallback(virConnectPtr conn ATTRIBU Py_DECREF(pyobj_cbData); Py_DECREF(pyobj_dom); -cleanup: + cleanup: if (!pyobj_ret) { DEBUG("%s - ret:%p\n", __FUNCTION__, pyobj_ret); PyErr_Print(); diff --git a/libvirt-utils.c b/libvirt-utils.c index 2dfffbc..02a28ac 100644 --- a/libvirt-utils.c +++ b/libvirt-utils.c @@ -402,7 +402,7 @@ setPyVirTypedParameter(PyObject *info, } return ret; -cleanup: + cleanup: virTypedParamsFree(ret, size); return NULL; } @@ -589,7 +589,7 @@ virPyDictToTypedParams(PyObject *dict, params = NULL; ret = 0; -cleanup: + cleanup: VIR_FREE(keystr); virTypedParamsFree(params, n); return ret; -- 2.5.3

Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-lxc-override.c | 30 ++++++------ libvirt-override.c | 125 ++++++++++++++++++++++-------------------------- libvirt-qemu-override.c | 41 ++++++++-------- typewrappers.c | 8 ++-- 4 files changed, 96 insertions(+), 108 deletions(-) diff --git a/libvirt-lxc-override.c b/libvirt-lxc-override.c index 2a3619e..8f5bb0c 100644 --- a/libvirt-lxc-override.c +++ b/libvirt-lxc-override.c @@ -41,10 +41,10 @@ extern void initcygvirtmod_lxc(void); #if DEBUG_ERROR # define DEBUG(fmt, ...) \ - printf(fmt, __VA_ARGS__) + printf(fmt, __VA_ARGS__) #else # define DEBUG(fmt, ...) \ - do {} while (0) + do {} while (0) #endif /************************************************************************ @@ -114,19 +114,19 @@ static PyMethodDef libvirtLxcMethods[] = { #if PY_MAJOR_VERSION > 2 static struct PyModuleDef moduledef = { - PyModuleDef_HEAD_INIT, + PyModuleDef_HEAD_INIT, # ifndef __CYGWIN__ - "libvirtmod_lxc", + "libvirtmod_lxc", # else - "cygvirtmod_lxc", + "cygvirtmod_lxc", # endif - NULL, - -1, - libvirtLxcMethods, - NULL, - NULL, - NULL, - NULL + NULL, + -1, + libvirtLxcMethods, + NULL, + NULL, + NULL, + NULL }; PyObject * @@ -135,7 +135,7 @@ PyInit_libvirtmod_lxc # else PyInit_cygvirtmod_lxc # endif - (void) +(void) { PyObject *module; @@ -153,7 +153,7 @@ initlibvirtmod_lxc # else initcygvirtmod_lxc # endif - (void) +(void) { if (virInitialize() < 0) return; @@ -165,6 +165,6 @@ initcygvirtmod_lxc # else "cygvirtmod_lxc", # endif - libvirtLxcMethods); + libvirtLxcMethods); } #endif /* ! PY_MAJOR_VERSION > 2 */ diff --git a/libvirt-override.c b/libvirt-override.c index 4c5590a..cf4fedb 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -45,10 +45,10 @@ extern void initcygvirtmod(void); #if DEBUG_ERROR # define DEBUG(fmt, ...) \ - printf(fmt, __VA_ARGS__) + printf(fmt, __VA_ARGS__) #else # define DEBUG(fmt, ...) \ - do {} while (0) + do {} while (0) #endif @@ -101,7 +101,7 @@ libvirt_virDomainBlockStats(PyObject *self ATTRIBUTE_UNUSED, PyObject *info; if (!PyArg_ParseTuple(args, (char *)"Oz:virDomainBlockStats", - &pyobj_domain, &path)) + &pyobj_domain, &path)) return NULL; domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain); @@ -319,7 +319,7 @@ libvirt_virDomainInterfaceStats(PyObject *self ATTRIBUTE_UNUSED, PyObject *info; if (!PyArg_ParseTuple(args, (char *)"Oz:virDomainInterfaceStats", - &pyobj_domain, &path)) + &pyobj_domain, &path)) return NULL; domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain); @@ -498,7 +498,7 @@ libvirt_virDomainGetSchedulerParameters(PyObject *self ATTRIBUTE_UNUSED, static PyObject * libvirt_virDomainGetSchedulerParametersFlags(PyObject *self ATTRIBUTE_UNUSED, - PyObject *args) + PyObject *args) { virDomainPtr domain; PyObject *pyobj_domain; @@ -1258,10 +1258,10 @@ libvirt_virDomainGetVcpus(PyObject *self ATTRIBUTE_UNUSED, goto itemError; continue; - itemError: - Py_DECREF(info); - Py_XDECREF(item); - goto cleanup; + itemError: + Py_DECREF(info); + Py_XDECREF(item); + goto cleanup; } for (i = 0; i < dominfo.nrVirtCpu; i++) { PyObject *info = PyTuple_New(cpunum); @@ -1326,8 +1326,8 @@ libvirt_virDomainPinVcpu(PyObject *self ATTRIBUTE_UNUSED, if (tuple_size == -1) return ret; } else { - PyErr_SetString(PyExc_TypeError, "Unexpected type, tuple is required"); - return ret; + PyErr_SetString(PyExc_TypeError, "Unexpected type, tuple is required"); + return ret; } cpumaplen = VIR_CPU_MAPLEN(cpunum); @@ -1391,8 +1391,8 @@ libvirt_virDomainPinVcpuFlags(PyObject *self ATTRIBUTE_UNUSED, if (tuple_size == -1) return ret; } else { - PyErr_SetString(PyExc_TypeError, "Unexpected type, tuple is required"); - return ret; + PyErr_SetString(PyExc_TypeError, "Unexpected type, tuple is required"); + return ret; } cpumaplen = VIR_CPU_MAPLEN(cpunum); @@ -1520,8 +1520,8 @@ libvirt_virDomainPinEmulator(PyObject *self ATTRIBUTE_UNUSED, cpumaplen = VIR_CPU_MAPLEN(cpunum); if (!PyTuple_Check(pycpumap)) { - PyErr_SetString(PyExc_TypeError, "Unexpected type, tuple is required"); - return NULL; + PyErr_SetString(PyExc_TypeError, "Unexpected type, tuple is required"); + return NULL; } if ((tuple_size = PyTuple_Size(pycpumap)) == -1) @@ -1889,9 +1889,8 @@ libvirt_virRegisterErrorHandler(ATTRIBUTE_UNUSED PyObject * self, PyObject *pyobj_f; PyObject *pyobj_ctx; - if (!PyArg_ParseTuple - (args, (char *) "OO:xmlRegisterErrorHandler", &pyobj_f, - &pyobj_ctx)) + if (!PyArg_ParseTuple(args, (char *) "OO:xmlRegisterErrorHandler", + &pyobj_f, &pyobj_ctx)) return NULL; DEBUG("libvirt_virRegisterErrorHandler(%p, %p) called\n", pyobj_ctx, @@ -3202,7 +3201,7 @@ libvirt_virNodeGetCellsFreeMemory(PyObject *self ATTRIBUTE_UNUSED, py_retval = PyList_New(c_retval); for (i = 0; i < c_retval; i++) { PyList_SetItem(py_retval, i, - libvirt_ulonglongWrap(freeMems[i])); + libvirt_ulonglongWrap(freeMems[i])); } VIR_FREE(freeMems); return py_retval; @@ -5102,9 +5101,8 @@ libvirt_virConnectDomainEventRegister(ATTRIBUTE_UNUSED PyObject *self, virConnectPtr conn; int ret = 0; - if (!PyArg_ParseTuple - (args, (char *) "OO:virConnectDomainEventRegister", - &pyobj_conn, &pyobj_conn_inst)) { + if (!PyArg_ParseTuple(args, (char *) "OO:virConnectDomainEventRegister", + &pyobj_conn, &pyobj_conn_inst)) { DEBUG("%s failed parsing tuple\n", __FUNCTION__); return VIR_PY_INT_FAIL; } @@ -5138,9 +5136,8 @@ libvirt_virConnectDomainEventDeregister(PyObject *self ATTRIBUTE_UNUSED, virConnectPtr conn; int ret = 0; - if (!PyArg_ParseTuple - (args, (char *) "OO:virConnectDomainEventDeregister", - &pyobj_conn, &pyobj_conn_inst)) + if (!PyArg_ParseTuple(args, (char *) "OO:virConnectDomainEventDeregister", + &pyobj_conn, &pyobj_conn_inst)) return NULL; DEBUG("libvirt_virConnectDomainEventDeregister(%p) called\n", pyobj_conn); @@ -5500,10 +5497,8 @@ libvirt_virEventInvokeHandleCallback(PyObject *self ATTRIBUTE_UNUSED, virEventHandleCallback cb; void *opaque; - if (!PyArg_ParseTuple - (args, (char *) "iiiOO:virEventInvokeHandleCallback", - &watch, &fd, &event, &py_f, &py_opaque - )) + if (!PyArg_ParseTuple(args, (char *) "iiiOO:virEventInvokeHandleCallback", + &watch, &fd, &event, &py_f, &py_opaque)) return VIR_PY_INT_FAIL; cb = (virEventHandleCallback) PyvirEventHandleCallback_Get(py_f); @@ -5528,10 +5523,8 @@ libvirt_virEventInvokeTimeoutCallback(PyObject *self ATTRIBUTE_UNUSED, virEventTimeoutCallback cb; void *opaque; - if (!PyArg_ParseTuple - (args, (char *) "iOO:virEventInvokeTimeoutCallback", - &timer, &py_f, &py_opaque - )) + if (!PyArg_ParseTuple(args, (char *) "iOO:virEventInvokeTimeoutCallback", + &timer, &py_f, &py_opaque)) return VIR_PY_INT_FAIL; cb = (virEventTimeoutCallback) PyvirEventTimeoutCallback_Get(py_f); @@ -6702,15 +6695,15 @@ libvirt_virConnectDomainEventRegisterAny(PyObject *self ATTRIBUTE_UNUSED, virConnectDomainEventGenericCallback cb = NULL; virDomainPtr dom; - if (!PyArg_ParseTuple - (args, (char *) "OOiO:virConnectDomainEventRegisterAny", - &pyobj_conn, &pyobj_dom, &eventID, &pyobj_cbData)) { + if (!PyArg_ParseTuple(args, + (char *) "OOiO:virConnectDomainEventRegisterAny", + &pyobj_conn, &pyobj_dom, &eventID, &pyobj_cbData)) { DEBUG("%s failed parsing tuple\n", __FUNCTION__); return VIR_PY_INT_FAIL; } DEBUG("libvirt_virConnectDomainEventRegister(%p %p %d %p) called\n", - pyobj_conn, pyobj_dom, eventID, pyobj_cbData); + pyobj_conn, pyobj_dom, eventID, pyobj_cbData); conn = PyvirConnect_Get(pyobj_conn); if (pyobj_dom == Py_None) dom = NULL; @@ -6824,9 +6817,8 @@ libvirt_virConnectDomainEventDeregisterAny(PyObject *self ATTRIBUTE_UNUSED, virConnectPtr conn; int ret = 0; - if (!PyArg_ParseTuple - (args, (char *) "Oi:virConnectDomainEventDeregister", - &pyobj_conn, &callbackID)) + if (!PyArg_ParseTuple(args, (char *) "Oi:virConnectDomainEventDeregister", + &pyobj_conn, &callbackID)) return NULL; DEBUG("libvirt_virConnectDomainEventDeregister(%p) called\n", pyobj_conn); @@ -6920,15 +6912,15 @@ libvirt_virConnectNetworkEventRegisterAny(PyObject *self ATTRIBUTE_UNUSED, virConnectNetworkEventGenericCallback cb = NULL; virNetworkPtr net; - if (!PyArg_ParseTuple - (args, (char *) "OOiO:virConnectNetworkEventRegisterAny", - &pyobj_conn, &pyobj_net, &eventID, &pyobj_cbData)) { + if (!PyArg_ParseTuple(args, + (char *) "OOiO:virConnectNetworkEventRegisterAny", + &pyobj_conn, &pyobj_net, &eventID, &pyobj_cbData)) { DEBUG("%s failed parsing tuple\n", __FUNCTION__); return VIR_PY_INT_FAIL; } DEBUG("libvirt_virConnectNetworkEventRegister(%p %p %d %p) called\n", - pyobj_conn, pyobj_net, eventID, pyobj_cbData); + pyobj_conn, pyobj_net, eventID, pyobj_cbData); conn = PyvirConnect_Get(pyobj_conn); if (pyobj_net == Py_None) net = NULL; @@ -6974,9 +6966,8 @@ libvirt_virConnectNetworkEventDeregisterAny(PyObject *self ATTRIBUTE_UNUSED, virConnectPtr conn; int ret = 0; - if (!PyArg_ParseTuple - (args, (char *) "Oi:virConnectNetworkEventDeregister", - &pyobj_conn, &callbackID)) + if (!PyArg_ParseTuple(args, (char *) "Oi:virConnectNetworkEventDeregister", + &pyobj_conn, &callbackID)) return NULL; DEBUG("libvirt_virConnectNetworkEventDeregister(%p) called\n", pyobj_conn); @@ -7041,15 +7032,14 @@ libvirt_virConnectRegisterCloseCallback(PyObject * self ATTRIBUTE_UNUSED, virConnectPtr conn; int ret = 0; - if (!PyArg_ParseTuple - (args, (char *) "OO:virConnectRegisterCloseCallback", - &pyobj_conn, &pyobj_cbData)) { + if (!PyArg_ParseTuple(args, (char *) "OO:virConnectRegisterCloseCallback", + &pyobj_conn, &pyobj_cbData)) { DEBUG("%s failed parsing tuple\n", __FUNCTION__); return VIR_PY_INT_FAIL; } DEBUG("libvirt_virConnectRegisterCloseCallback(%p %p) called\n", - pyobj_conn, pyobj_cbData); + pyobj_conn, pyobj_cbData); conn = PyvirConnect_Get(pyobj_conn); Py_INCREF(pyobj_cbData); @@ -7078,9 +7068,8 @@ libvirt_virConnectUnregisterCloseCallback(PyObject * self ATTRIBUTE_UNUSED, virConnectPtr conn; int ret = 0; - if (!PyArg_ParseTuple - (args, (char *) "O:virConnectDomainEventUnregister", - &pyobj_conn)) + if (!PyArg_ParseTuple(args, (char *) "O:virConnectDomainEventUnregister", + &pyobj_conn)) return NULL; DEBUG("libvirt_virConnectDomainEventUnregister(%p) called\n", @@ -8424,7 +8413,7 @@ libvirt_virDomainGetFSInfo(PyObject *self ATTRIBUTE_UNUSED, PyObject *py_retval = NULL; if (!PyArg_ParseTuple(args, (char *)"Oi:virDomainFSInfo", - &pyobj_domain, &flags)) + &pyobj_domain, &flags)) return NULL; domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain); @@ -8687,19 +8676,19 @@ static PyMethodDef libvirtMethods[] = { #if PY_MAJOR_VERSION > 2 static struct PyModuleDef moduledef = { - PyModuleDef_HEAD_INIT, + PyModuleDef_HEAD_INIT, # ifndef __CYGWIN__ - "libvirtmod", + "libvirtmod", # else - "cygvirtmod", + "cygvirtmod", # endif - NULL, - -1, - libvirtMethods, - NULL, - NULL, - NULL, - NULL + NULL, + -1, + libvirtMethods, + NULL, + NULL, + NULL, + NULL }; PyObject * @@ -8708,7 +8697,7 @@ PyInit_libvirtmod # else PyInit_cygvirtmod # endif - (void) +(void) { PyObject *module; @@ -8726,7 +8715,7 @@ initlibvirtmod # else initcygvirtmod # endif - (void) +(void) { if (virInitialize() < 0) return; @@ -8738,6 +8727,6 @@ initcygvirtmod # else "cygvirtmod", # endif - libvirtMethods); + libvirtMethods); } #endif /* ! PY_MAJOR_VERSION > 2 */ diff --git a/libvirt-qemu-override.c b/libvirt-qemu-override.c index ad1693b..46d513d 100644 --- a/libvirt-qemu-override.c +++ b/libvirt-qemu-override.c @@ -41,10 +41,10 @@ extern void initcygvirtmod_qemu(void); #if DEBUG_ERROR # define DEBUG(fmt, ...) \ - printf(fmt, __VA_ARGS__) + printf(fmt, __VA_ARGS__) #else # define DEBUG(fmt, ...) \ - do {} while (0) + do {} while (0) #endif /******************************************* @@ -270,9 +270,8 @@ libvirt_qemu_virConnectDomainQemuMonitorEventRegister(PyObject *self ATTRIBUTE_U virDomainPtr dom; unsigned int flags; - if (!PyArg_ParseTuple - (args, (char *) "OOzOI", - &pyobj_conn, &pyobj_dom, &event, &pyobj_cbData, &flags)) { + if (!PyArg_ParseTuple(args, (char *) "OOzOI", &pyobj_conn, &pyobj_dom, + &event, &pyobj_cbData, &flags)) { DEBUG("%s failed parsing tuple\n", __FUNCTION__); return VIR_PY_INT_FAIL; } @@ -315,9 +314,9 @@ libvirt_qemu_virConnectDomainQemuMonitorEventDeregister(PyObject *self ATTRIBUTE virConnectPtr conn; int ret = 0; - if (!PyArg_ParseTuple - (args, (char *) "Oi:virConnectDomainQemuMonitorEventDeregister", - &pyobj_conn, &callbackID)) + if (!PyArg_ParseTuple(args, + (char *) "Oi:virConnectDomainQemuMonitorEventDeregister", + &pyobj_conn, &callbackID)) return NULL; DEBUG("libvirt_qemu_virConnectDomainQemuMonitorEventDeregister(%p) called\n", @@ -355,19 +354,19 @@ static PyMethodDef libvirtQemuMethods[] = { #if PY_MAJOR_VERSION > 2 static struct PyModuleDef moduledef = { - PyModuleDef_HEAD_INIT, + PyModuleDef_HEAD_INIT, # ifndef __CYGWIN__ - "libvirtmod_qemu", + "libvirtmod_qemu", # else - "cygvirtmod_qemu", + "cygvirtmod_qemu", # endif - NULL, - -1, - libvirtQemuMethods, - NULL, - NULL, - NULL, - NULL + NULL, + -1, + libvirtQemuMethods, + NULL, + NULL, + NULL, + NULL }; PyObject * @@ -376,7 +375,7 @@ PyInit_libvirtmod_qemu # else PyInit_cygvirtmod_qemu # endif - (void) +(void) { PyObject *module; @@ -394,7 +393,7 @@ initlibvirtmod_qemu # else initcygvirtmod_qemu # endif - (void) +(void) { if (virInitialize() < 0) return; @@ -406,6 +405,6 @@ initcygvirtmod_qemu # else "cygvirtmod_qemu", # endif - libvirtQemuMethods); + libvirtQemuMethods); } #endif /* ! PY_MAJOR_VERSION > 2 */ diff --git a/typewrappers.c b/typewrappers.c index a164a11..6507e0f 100644 --- a/typewrappers.c +++ b/typewrappers.c @@ -145,10 +145,10 @@ libvirt_constcharPtrWrap(const char *str) PyObject * libvirt_boolWrap(int val) { - if (val) - Py_RETURN_TRUE; - else - Py_RETURN_FALSE; + if (val) + Py_RETURN_TRUE; + else + Py_RETURN_FALSE; } int -- 2.5.3

Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 148 ++++++++++++++++++++++++++++++++++------------------- 1 file changed, 95 insertions(+), 53 deletions(-) diff --git a/libvirt-override.c b/libvirt-override.c index cf4fedb..2a50f19 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -230,7 +230,8 @@ libvirt_virDomainGetCPUStats(PyObject *self ATTRIBUTE_UNUSED, LIBVIRT_BEGIN_ALLOW_THREADS; i_retval = virDomainGetCPUStats(domain, params, - nparams, start_cpu, queried_ncpus, flags); + nparams, start_cpu, + queried_ncpus, flags); LIBVIRT_END_ALLOW_THREADS; if (i_retval < 0) { @@ -277,7 +278,8 @@ libvirt_virDomainGetCPUStats(PyObject *self ATTRIBUTE_UNUSED, } LIBVIRT_BEGIN_ALLOW_THREADS; - i_retval = virDomainGetCPUStats(domain, params, nparams, -1, 1, flags); + i_retval = virDomainGetCPUStats(domain, params, nparams, + -1, 1, flags); LIBVIRT_END_ALLOW_THREADS; if (i_retval < 0) { @@ -529,7 +531,8 @@ libvirt_virDomainGetSchedulerParametersFlags(PyObject *self ATTRIBUTE_UNUSED, return PyErr_NoMemory(); LIBVIRT_BEGIN_ALLOW_THREADS; - i_retval = virDomainGetSchedulerParametersFlags(domain, params, &nparams, flags); + i_retval = virDomainGetSchedulerParametersFlags(domain, params, &nparams, + flags); LIBVIRT_END_ALLOW_THREADS; if (i_retval < 0) { @@ -665,7 +668,8 @@ libvirt_virDomainSetSchedulerParametersFlags(PyObject *self ATTRIBUTE_UNUSED, return PyErr_NoMemory(); LIBVIRT_BEGIN_ALLOW_THREADS; - i_retval = virDomainGetSchedulerParametersFlags(domain, params, &nparams, flags); + i_retval = virDomainGetSchedulerParametersFlags(domain, params, &nparams, + flags); LIBVIRT_END_ALLOW_THREADS; if (i_retval < 0) { @@ -678,7 +682,8 @@ libvirt_virDomainSetSchedulerParametersFlags(PyObject *self ATTRIBUTE_UNUSED, goto cleanup; LIBVIRT_BEGIN_ALLOW_THREADS; - i_retval = virDomainSetSchedulerParametersFlags(domain, new_params, size, flags); + i_retval = virDomainSetSchedulerParametersFlags(domain, new_params, size, + flags); LIBVIRT_END_ALLOW_THREADS; if (i_retval < 0) { @@ -1084,7 +1089,8 @@ libvirt_virDomainSetInterfaceParameters(PyObject *self ATTRIBUTE_UNUSED, } LIBVIRT_BEGIN_ALLOW_THREADS; - i_retval = virDomainGetInterfaceParameters(domain, device, NULL, &nparams, flags); + i_retval = virDomainGetInterfaceParameters(domain, device, NULL, &nparams, + flags); LIBVIRT_END_ALLOW_THREADS; if (i_retval < 0) @@ -1100,7 +1106,8 @@ libvirt_virDomainSetInterfaceParameters(PyObject *self ATTRIBUTE_UNUSED, return PyErr_NoMemory(); LIBVIRT_BEGIN_ALLOW_THREADS; - i_retval = virDomainGetInterfaceParameters(domain, device, params, &nparams, flags); + i_retval = virDomainGetInterfaceParameters(domain, device, params, &nparams, + flags); LIBVIRT_END_ALLOW_THREADS; if (i_retval < 0) { @@ -1113,7 +1120,8 @@ libvirt_virDomainSetInterfaceParameters(PyObject *self ATTRIBUTE_UNUSED, goto cleanup; LIBVIRT_BEGIN_ALLOW_THREADS; - i_retval = virDomainSetInterfaceParameters(domain, device, new_params, size, flags); + i_retval = virDomainSetInterfaceParameters(domain, device, new_params, size, + flags); LIBVIRT_END_ALLOW_THREADS; if (i_retval < 0) { @@ -1148,7 +1156,8 @@ libvirt_virDomainGetInterfaceParameters(PyObject *self ATTRIBUTE_UNUSED, domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain); LIBVIRT_BEGIN_ALLOW_THREADS; - i_retval = virDomainGetInterfaceParameters(domain, device, NULL, &nparams, flags); + i_retval = virDomainGetInterfaceParameters(domain, device, NULL, &nparams, + flags); LIBVIRT_END_ALLOW_THREADS; if (i_retval < 0) @@ -1161,7 +1170,8 @@ libvirt_virDomainGetInterfaceParameters(PyObject *self ATTRIBUTE_UNUSED, return PyErr_NoMemory(); LIBVIRT_BEGIN_ALLOW_THREADS; - i_retval = virDomainGetInterfaceParameters(domain, device, params, &nparams, flags); + i_retval = virDomainGetInterfaceParameters(domain, device, params, &nparams, + flags); LIBVIRT_END_ALLOW_THREADS; if (i_retval < 0) { @@ -1181,7 +1191,8 @@ libvirt_virDomainGetVcpus(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { virDomainPtr domain; - PyObject *pyobj_domain, *pyretval = NULL, *pycpuinfo = NULL, *pycpumap = NULL; + PyObject *pyobj_domain, *pyretval = NULL; + PyObject *pycpuinfo = NULL, *pycpumap = NULL; PyObject *error = NULL; virDomainInfo dominfo; virVcpuInfoPtr cpuinfo = NULL; @@ -1270,7 +1281,8 @@ libvirt_virDomainGetVcpus(PyObject *self ATTRIBUTE_UNUSED, goto cleanup; for (j = 0; j < cpunum; j++) { PyObject *item = NULL; - if ((item = PyBool_FromLong(VIR_CPU_USABLE(cpumap, cpumaplen, i, j))) == NULL || + if ((item = PyBool_FromLong(VIR_CPU_USABLE(cpumap, cpumaplen, + i, j))) == NULL || PyTuple_SetItem(info, j, item) < 0) { Py_DECREF(info); Py_XDECREF(item); @@ -1477,7 +1489,8 @@ libvirt_virDomainGetVcpuPinInfo(PyObject *self ATTRIBUTE_UNUSED, for (pcpu = 0; pcpu < cpunum; pcpu++) { PyTuple_SetItem(mapinfo, pcpu, - PyBool_FromLong(VIR_CPU_USABLE(cpumaps, cpumaplen, vcpu, pcpu))); + PyBool_FromLong(VIR_CPU_USABLE(cpumaps, cpumaplen, + vcpu, pcpu))); } PyList_SetItem(pycpumaps, vcpu, mapinfo); } @@ -1946,13 +1959,15 @@ virConnectCredCallbackWrapper(virConnectCredentialPtr cred, PyList_SetItem(pycreditem, 0, libvirt_intWrap((long) cred[i].type)); PyList_SetItem(pycreditem, 1, libvirt_constcharPtrWrap(cred[i].prompt)); if (cred[i].challenge) { - PyList_SetItem(pycreditem, 2, libvirt_constcharPtrWrap(cred[i].challenge)); + PyList_SetItem(pycreditem, 2, + libvirt_constcharPtrWrap(cred[i].challenge)); } else { Py_INCREF(Py_None); PyList_SetItem(pycreditem, 2, Py_None); } if (cred[i].defresult) { - PyList_SetItem(pycreditem, 3, libvirt_constcharPtrWrap(cred[i].defresult)); + PyList_SetItem(pycreditem, 3, + libvirt_constcharPtrWrap(cred[i].defresult)); } else { Py_INCREF(Py_None); PyList_SetItem(pycreditem, 3, Py_None); @@ -2015,7 +2030,8 @@ libvirt_virConnectOpenAuth(PyObject *self ATTRIBUTE_UNUSED, virConnectAuth auth; memset(&auth, 0, sizeof(auth)); - if (!PyArg_ParseTuple(args, (char *)"zOI:virConnectOpenAuth", &name, &pyauth, &flags)) + if (!PyArg_ParseTuple(args, (char *)"zOI:virConnectOpenAuth", + &name, &pyauth, &flags)) return NULL; pycredtype = PyList_GetItem(pyauth, 0); @@ -2293,7 +2309,8 @@ libvirt_virConnectListDefinedDomains(PyObject *self ATTRIBUTE_UNUSED, PyObject *pyobj_conn; - if (!PyArg_ParseTuple(args, (char *)"O:virConnectListDefinedDomains", &pyobj_conn)) + if (!PyArg_ParseTuple(args, (char *)"O:virConnectListDefinedDomains", + &pyobj_conn)) return NULL; conn = (virConnectPtr) PyvirConnect_Get(pyobj_conn); @@ -2545,7 +2562,8 @@ libvirt_virDomainRevertToSnapshot(PyObject *self ATTRIBUTE_UNUSED, PyObject *pyobj_dom; unsigned int flags; - if (!PyArg_ParseTuple(args, (char *)"OOI:virDomainRevertToSnapshot", &pyobj_dom, &pyobj_snap, &flags)) + if (!PyArg_ParseTuple(args, (char *)"OOI:virDomainRevertToSnapshot", + &pyobj_dom, &pyobj_snap, &flags)) return NULL; snap = (virDomainSnapshotPtr) PyvirDomainSnapshot_Get(pyobj_snap); @@ -2657,7 +2675,8 @@ libvirt_virDomainGetBlockInfo(PyObject *self ATTRIBUTE_UNUSED, const char *path; unsigned int flags; - if (!PyArg_ParseTuple(args, (char *)"OzI:virDomainGetInfo", &pyobj_domain, &path, &flags)) + if (!PyArg_ParseTuple(args, (char *)"OzI:virDomainGetInfo", + &pyobj_domain, &path, &flags)) return NULL; domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain); @@ -2714,7 +2733,8 @@ libvirt_virNodeGetSecurityModel(PyObject *self ATTRIBUTE_UNUSED, PyObject *pyobj_conn; virSecurityModel model; - if (!PyArg_ParseTuple(args, (char *)"O:virDomainGetSecurityModel", &pyobj_conn)) + if (!PyArg_ParseTuple(args, (char *)"O:virDomainGetSecurityModel", + &pyobj_conn)) return NULL; conn = (virConnectPtr) PyvirConnect_Get(pyobj_conn); @@ -2739,7 +2759,8 @@ libvirt_virDomainGetSecurityLabel(PyObject *self ATTRIBUTE_UNUSED, PyObject *pyobj_dom; virSecurityLabel label; - if (!PyArg_ParseTuple(args, (char *)"O:virDomainGetSecurityLabel", &pyobj_dom)) + if (!PyArg_ParseTuple(args, (char *)"O:virDomainGetSecurityLabel", + &pyobj_dom)) return NULL; dom = (virDomainPtr) PyvirDomain_Get(pyobj_dom); @@ -2766,7 +2787,8 @@ libvirt_virDomainGetSecurityLabelList(PyObject *self ATTRIBUTE_UNUSED, virSecurityLabel *labels = NULL; size_t i; - if (!PyArg_ParseTuple(args, (char *)"O:virDomainGetSecurityLabel", &pyobj_dom)) + if (!PyArg_ParseTuple(args, (char *)"O:virDomainGetSecurityLabel", + &pyobj_dom)) return NULL; dom = (virDomainPtr) PyvirDomain_Get(pyobj_dom); @@ -2881,7 +2903,8 @@ libvirt_virDomainLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, unsigned char * uuid; int len; - if (!PyArg_ParseTuple(args, (char *)"Oz#:virDomainLookupByUUID", &pyobj_conn, &uuid, &len)) + if (!PyArg_ParseTuple(args, (char *)"Oz#:virDomainLookupByUUID", + &pyobj_conn, &uuid, &len)) return NULL; conn = (virConnectPtr) PyvirConnect_Get(pyobj_conn); @@ -2908,7 +2931,8 @@ libvirt_virConnectListNetworks(PyObject *self ATTRIBUTE_UNUSED, PyObject *pyobj_conn; - if (!PyArg_ParseTuple(args, (char *)"O:virConnectListNetworks", &pyobj_conn)) + if (!PyArg_ParseTuple(args, (char *)"O:virConnectListNetworks", + &pyobj_conn)) return NULL; conn = (virConnectPtr) PyvirConnect_Get(pyobj_conn); @@ -2955,7 +2979,8 @@ libvirt_virConnectListDefinedNetworks(PyObject *self ATTRIBUTE_UNUSED, PyObject *pyobj_conn; - if (!PyArg_ParseTuple(args, (char *)"O:virConnectListDefinedNetworks", &pyobj_conn)) + if (!PyArg_ParseTuple(args, (char *)"O:virConnectListDefinedNetworks", + &pyobj_conn)) return NULL; conn = (virConnectPtr) PyvirConnect_Get(pyobj_conn); @@ -3105,7 +3130,8 @@ libvirt_virNetworkLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, unsigned char * uuid; int len; - if (!PyArg_ParseTuple(args, (char *)"Oz#:virNetworkLookupByUUID", &pyobj_conn, &uuid, &len)) + if (!PyArg_ParseTuple(args, (char *)"Oz#:virNetworkLookupByUUID", + &pyobj_conn, &uuid, &len)) return NULL; conn = (virConnectPtr) PyvirConnect_Get(pyobj_conn); @@ -3129,7 +3155,8 @@ libvirt_virDomainGetAutostart(PyObject *self ATTRIBUTE_UNUSED, virDomainPtr domain; PyObject *pyobj_domain; - if (!PyArg_ParseTuple(args, (char *)"O:virDomainGetAutostart", &pyobj_domain)) + if (!PyArg_ParseTuple(args, (char *)"O:virDomainGetAutostart", + &pyobj_domain)) return NULL; domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain); @@ -3154,7 +3181,8 @@ libvirt_virNetworkGetAutostart(PyObject *self ATTRIBUTE_UNUSED, virNetworkPtr network; PyObject *pyobj_network; - if (!PyArg_ParseTuple(args, (char *)"O:virNetworkGetAutostart", &pyobj_network)) + if (!PyArg_ParseTuple(args, (char *)"O:virNetworkGetAutostart", + &pyobj_network)) return NULL; network = (virNetworkPtr) PyvirNetwork_Get(pyobj_network); @@ -3180,7 +3208,8 @@ libvirt_virNodeGetCellsFreeMemory(PyObject *self ATTRIBUTE_UNUSED, virConnectPtr conn; unsigned long long *freeMems; - if (!PyArg_ParseTuple(args, (char *)"Oii:virNodeGetCellsFreeMemory", &pyobj_conn, &startCell, &maxCells)) + if (!PyArg_ParseTuple(args, (char *)"Oii:virNodeGetCellsFreeMemory", + &pyobj_conn, &startCell, &maxCells)) return NULL; if ((startCell < 0) || (maxCells <= 0) || (startCell + maxCells > 10000)) @@ -3222,7 +3251,8 @@ libvirt_virNodeGetCPUStats(PyObject *self ATTRIBUTE_UNUSED, int nparams = 0; virNodeCPUStatsPtr stats = NULL; - if (!PyArg_ParseTuple(args, (char *)"OiI:virNodeGetCPUStats", &pyobj_conn, &cpuNum, &flags)) + if (!PyArg_ParseTuple(args, (char *)"OiI:virNodeGetCPUStats", + &pyobj_conn, &cpuNum, &flags)) return ret; conn = (virConnectPtr)(PyvirConnect_Get(pyobj_conn)); @@ -3287,8 +3317,9 @@ libvirt_virNodeGetMemoryStats(PyObject *self ATTRIBUTE_UNUSED, int nparams = 0; virNodeMemoryStatsPtr stats = NULL; - if (!PyArg_ParseTuple(args, (char *)"OiI:virNodeGetMemoryStats", &pyobj_conn, &cellNum, &flags)) - return ret; + if (!PyArg_ParseTuple(args, (char *)"OiI:virNodeGetMemoryStats", + &pyobj_conn, &cellNum, &flags)) + return NULL; conn = (virConnectPtr)(PyvirConnect_Get(pyobj_conn)); LIBVIRT_BEGIN_ALLOW_THREADS; @@ -3348,8 +3379,8 @@ libvirt_virConnectListStoragePools(PyObject *self ATTRIBUTE_UNUSED, virConnectPtr conn; PyObject *pyobj_conn; - - if (!PyArg_ParseTuple(args, (char *)"O:virConnectListStoragePools", &pyobj_conn)) + if (!PyArg_ParseTuple(args, (char *)"O:virConnectListStoragePools", + &pyobj_conn)) return NULL; conn = (virConnectPtr) PyvirConnect_Get(pyobj_conn); @@ -3403,8 +3434,8 @@ libvirt_virConnectListDefinedStoragePools(PyObject *self ATTRIBUTE_UNUSED, virConnectPtr conn; PyObject *pyobj_conn; - - if (!PyArg_ParseTuple(args, (char *)"O:virConnectListDefinedStoragePools", &pyobj_conn)) + if (!PyArg_ParseTuple(args, (char *)"O:virConnectListDefinedStoragePools", + &pyobj_conn)) return NULL; conn = (virConnectPtr) PyvirConnect_Get(pyobj_conn); @@ -3506,8 +3537,8 @@ libvirt_virStoragePoolListVolumes(PyObject *self ATTRIBUTE_UNUSED, virStoragePoolPtr pool; PyObject *pyobj_pool; - - if (!PyArg_ParseTuple(args, (char *)"O:virStoragePoolListVolumes", &pyobj_pool)) + if (!PyArg_ParseTuple(args, (char *)"O:virStoragePoolListVolumes", + &pyobj_pool)) return NULL; pool = (virStoragePoolPtr) PyvirStoragePool_Get(pyobj_pool); @@ -3609,7 +3640,8 @@ libvirt_virStoragePoolGetAutostart(PyObject *self ATTRIBUTE_UNUSED, virStoragePoolPtr pool; PyObject *pyobj_pool; - if (!PyArg_ParseTuple(args, (char *)"O:virStoragePoolGetAutostart", &pyobj_pool)) + if (!PyArg_ParseTuple(args, (char *)"O:virStoragePoolGetAutostart", + &pyobj_pool)) return NULL; pool = (virStoragePoolPtr) PyvirStoragePool_Get(pyobj_pool); @@ -3727,7 +3759,8 @@ libvirt_virStoragePoolGetUUIDString(PyObject *self ATTRIBUTE_UNUSED, PyObject *pyobj_pool; int c_retval; - if (!PyArg_ParseTuple(args, (char *)"O:virStoragePoolGetUUIDString", &pyobj_pool)) + if (!PyArg_ParseTuple(args, (char *)"O:virStoragePoolGetUUIDString", + &pyobj_pool)) return NULL; pool = (virStoragePoolPtr) PyvirStoragePool_Get(pyobj_pool); @@ -3755,7 +3788,8 @@ libvirt_virStoragePoolLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, unsigned char * uuid; int len; - if (!PyArg_ParseTuple(args, (char *)"Oz#:virStoragePoolLookupByUUID", &pyobj_conn, &uuid, &len)) + if (!PyArg_ParseTuple(args, (char *)"Oz#:virStoragePoolLookupByUUID", + &pyobj_conn, &uuid, &len)) return NULL; conn = (virConnectPtr) PyvirConnect_Get(pyobj_conn); @@ -3977,7 +4011,8 @@ libvirt_virSecretLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, unsigned char * uuid; int len; - if (!PyArg_ParseTuple(args, (char *)"Oz#:virSecretLookupByUUID", &pyobj_conn, &uuid, &len)) + if (!PyArg_ParseTuple(args, (char *)"Oz#:virSecretLookupByUUID", + &pyobj_conn, &uuid, &len)) return NULL; conn = (virConnectPtr) PyvirConnect_Get(pyobj_conn); @@ -4151,7 +4186,8 @@ libvirt_virNWFilterGetUUID(PyObject *self ATTRIBUTE_UNUSED, PyObject *pyobj_nwfilter; int c_retval; - if (!PyArg_ParseTuple(args, (char *)"O:virNWFilterGetUUID", &pyobj_nwfilter)) + if (!PyArg_ParseTuple(args, (char *)"O:virNWFilterGetUUID", + &pyobj_nwfilter)) return NULL; nwfilter = (virNWFilterPtr) PyvirNWFilter_Get(pyobj_nwfilter); @@ -4207,7 +4243,8 @@ libvirt_virNWFilterLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, unsigned char * uuid; int len; - if (!PyArg_ParseTuple(args, (char *)"Oz#:virNWFilterLookupByUUID", &pyobj_conn, &uuid, &len)) + if (!PyArg_ParseTuple(args, (char *)"Oz#:virNWFilterLookupByUUID", + &pyobj_conn, &uuid, &len)) return NULL; conn = (virConnectPtr) PyvirConnect_Get(pyobj_conn); @@ -4233,7 +4270,8 @@ libvirt_virConnectListNWFilters(PyObject *self ATTRIBUTE_UNUSED, size_t i; PyObject *pyobj_conn; - if (!PyArg_ParseTuple(args, (char *)"O:virConnectListNWFilters", &pyobj_conn)) + if (!PyArg_ParseTuple(args, (char *)"O:virConnectListNWFilters", + &pyobj_conn)) return NULL; conn = (virConnectPtr) PyvirConnect_Get(pyobj_conn); @@ -4328,7 +4366,8 @@ libvirt_virConnectListInterfaces(PyObject *self ATTRIBUTE_UNUSED, PyObject *pyobj_conn; - if (!PyArg_ParseTuple(args, (char *)"O:virConnectListInterfaces", &pyobj_conn)) + if (!PyArg_ParseTuple(args, (char *)"O:virConnectListInterfaces", + &pyobj_conn)) return NULL; conn = (virConnectPtr) PyvirConnect_Get(pyobj_conn); @@ -4501,7 +4540,8 @@ libvirt_virConnectBaselineCPU(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE; for (i = 0; i < ncpus; i++) { - if (libvirt_charPtrUnwrap(PyList_GetItem(list, i), &(xmlcpus[i])) < 0 || + if (libvirt_charPtrUnwrap(PyList_GetItem(list, i), + &(xmlcpus[i])) < 0 || xmlcpus[i] == NULL) { for (j = 0 ; j < i ; j++) VIR_FREE(xmlcpus[j]); @@ -6059,8 +6099,10 @@ libvirt_virConnectDomainEventGraphicsCallback(virConnectPtr conn ATTRIBUTE_UNUSE pyobj_subject = PyList_New(subject->nidentity); for (i = 0; i < subject->nidentity; i++) { PyObject *pair = PyTuple_New(2); - PyTuple_SetItem(pair, 0, libvirt_constcharPtrWrap(subject->identities[i].type)); - PyTuple_SetItem(pair, 1, libvirt_constcharPtrWrap(subject->identities[i].name)); + PyTuple_SetItem(pair, 0, + libvirt_constcharPtrWrap(subject->identities[i].type)); + PyTuple_SetItem(pair, 1, + libvirt_constcharPtrWrap(subject->identities[i].name)); PyList_SetItem(pyobj_subject, i, pair); } @@ -7418,8 +7460,8 @@ libvirt_virDomainBlockPeek(PyObject *self ATTRIBUTE_UNUSED, char *buf; unsigned int flags; - if (!PyArg_ParseTuple(args, (char *)"OzLnI:virDomainBlockPeek", &pyobj_domain, - &disk, &offset, &size, &flags)) + if (!PyArg_ParseTuple(args, (char *)"OzLnI:virDomainBlockPeek", + &pyobj_domain, &disk, &offset, &size, &flags)) return NULL; domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain); @@ -7456,8 +7498,8 @@ libvirt_virDomainMemoryPeek(PyObject *self ATTRIBUTE_UNUSED, char *buf; unsigned int flags; - if (!PyArg_ParseTuple(args, (char *)"OLnI:virDomainMemoryPeek", &pyobj_domain, - &start, &size, &flags)) + if (!PyArg_ParseTuple(args, (char *)"OLnI:virDomainMemoryPeek", + &pyobj_domain, &start, &size, &flags)) return NULL; domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain); -- 2.5.3

There is a rule, python API fails, it also in those cases sets an exception. We should follow those rules and in those cases return NULL. Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-lxc-override.c | 2 +- libvirt-override.c | 143 +++++++++++++++++++++--------------------------- libvirt-qemu-override.c | 6 +- 3 files changed, 64 insertions(+), 87 deletions(-) diff --git a/libvirt-lxc-override.c b/libvirt-lxc-override.c index 8f5bb0c..20d1cf4 100644 --- a/libvirt-lxc-override.c +++ b/libvirt-lxc-override.c @@ -99,7 +99,7 @@ libvirt_lxc_virDomainLxcOpenNamespace(PyObject *self ATTRIBUTE_UNUSED, VIR_FORCE_CLOSE(fdlist[i]); } VIR_FREE(fdlist); - return VIR_PY_NONE; + return NULL; } /************************************************************************ * * diff --git a/libvirt-override.c b/libvirt-override.c index 2a50f19..a6339e5 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -114,7 +114,8 @@ libvirt_virDomainBlockStats(PyObject *self ATTRIBUTE_UNUSED, /* convert to a Python tuple of long objects */ if ((info = PyTuple_New(5)) == NULL) - return VIR_PY_NONE; + return NULL; + PyTuple_SetItem(info, 0, libvirt_longlongWrap(stats.rd_req)); PyTuple_SetItem(info, 1, libvirt_longlongWrap(stats.rd_bytes)); PyTuple_SetItem(info, 2, libvirt_longlongWrap(stats.wr_req)); @@ -334,7 +335,8 @@ libvirt_virDomainInterfaceStats(PyObject *self ATTRIBUTE_UNUSED, /* convert to a Python tuple of long objects */ if ((info = PyTuple_New(8)) == NULL) - return VIR_PY_NONE; + return NULL; + PyTuple_SetItem(info, 0, libvirt_longlongWrap(stats.rx_bytes)); PyTuple_SetItem(info, 1, libvirt_longlongWrap(stats.rx_packets)); PyTuple_SetItem(info, 2, libvirt_longlongWrap(stats.rx_errs)); @@ -369,7 +371,7 @@ libvirt_virDomainMemoryStats(PyObject *self ATTRIBUTE_UNUSED, /* convert to a Python dictionary */ if ((info = PyDict_New()) == NULL) - return VIR_PY_NONE; + return NULL; for (i = 0; i < nr_stats; i++) { switch (stats[i].tag) { @@ -442,7 +444,7 @@ libvirt_virDomainGetSchedulerType(PyObject *self ATTRIBUTE_UNUSED, /* convert to a Python tuple of long objects */ if ((info = PyTuple_New(2)) == NULL) { VIR_FREE(c_retval); - return VIR_PY_NONE; + return NULL; } PyTuple_SetItem(info, 0, libvirt_constcharPtrWrap(c_retval)); @@ -1504,7 +1506,7 @@ libvirt_virDomainGetVcpuPinInfo(PyObject *self ATTRIBUTE_UNUSED, Py_XDECREF(pycpumaps); - return VIR_PY_NONE; + return NULL; } @@ -1549,7 +1551,7 @@ libvirt_virDomainPinEmulator(PyObject *self ATTRIBUTE_UNUSED, if (!flag || libvirt_boolUnwrap(flag, &b) < 0) { VIR_FREE(cpumap); - return VIR_PY_INT_FAIL; + return NULL; } if (b) @@ -1695,7 +1697,6 @@ libvirt_virDomainGetIOThreadInfo(PyObject *self ATTRIBUTE_UNUSED, PyObject *pyused; if ((pyused = PyBool_FromLong(VIR_CPU_USED(iothr->cpumap, pcpu))) == NULL) { - py_retval = VIR_PY_NONE; goto cleanup; } if (PyList_SetItem(iothrmap, pcpu, pyused) < 0) { @@ -1804,7 +1805,8 @@ libvirt_virGetLastError(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE; if ((info = PyTuple_New(9)) == NULL) - return VIR_PY_NONE; + return NULL; + PyTuple_SetItem(info, 0, libvirt_intWrap((long) err->code)); PyTuple_SetItem(info, 1, libvirt_intWrap((long) err->domain)); PyTuple_SetItem(info, 2, libvirt_constcharPtrWrap(err->message)); @@ -1838,7 +1840,8 @@ libvirt_virConnGetLastError(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE; if ((info = PyTuple_New(9)) == NULL) - return VIR_PY_NONE; + return NULL; + PyTuple_SetItem(info, 0, libvirt_intWrap((long) err->code)); PyTuple_SetItem(info, 1, libvirt_intWrap((long) err->domain)); PyTuple_SetItem(info, 2, libvirt_constcharPtrWrap(err->message)); @@ -3408,7 +3411,7 @@ libvirt_virConnectListStoragePools(PyObject *self ATTRIBUTE_UNUSED, VIR_FREE(names[i]); VIR_FREE(names); } - return VIR_PY_NONE; + return NULL; } if (names) { @@ -3463,7 +3466,7 @@ libvirt_virConnectListDefinedStoragePools(PyObject *self ATTRIBUTE_UNUSED, VIR_FREE(names[i]); VIR_FREE(names); } - return VIR_PY_NONE; + return NULL; } if (names) { @@ -3566,7 +3569,7 @@ libvirt_virStoragePoolListVolumes(PyObject *self ATTRIBUTE_UNUSED, VIR_FREE(names[i]); VIR_FREE(names); } - return VIR_PY_NONE; + return NULL; } if (names) { @@ -3678,7 +3681,7 @@ libvirt_virStoragePoolGetInfo(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE; if ((py_retval = PyList_New(4)) == NULL) - return VIR_PY_NONE; + return NULL; PyList_SetItem(py_retval, 0, libvirt_intWrap((int) info.state)); PyList_SetItem(py_retval, 1, @@ -3712,7 +3715,8 @@ libvirt_virStorageVolGetInfo(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE; if ((py_retval = PyList_New(3)) == NULL) - return VIR_PY_NONE; + return NULL; + PyList_SetItem(py_retval, 0, libvirt_intWrap((int) info.type)); PyList_SetItem(py_retval, 1, libvirt_ulonglongWrap(info.capacity)); @@ -4395,7 +4399,7 @@ libvirt_virConnectListInterfaces(PyObject *self ATTRIBUTE_UNUSED, VIR_FREE(names[i]); VIR_FREE(names); } - return VIR_PY_NONE; + return NULL; } if (names) { @@ -4451,7 +4455,7 @@ libvirt_virConnectListDefinedInterfaces(PyObject *self ATTRIBUTE_UNUSED, VIR_FREE(names[i]); VIR_FREE(names); } - return VIR_PY_NONE; + return NULL; } if (names) { @@ -4546,7 +4550,7 @@ libvirt_virConnectBaselineCPU(PyObject *self ATTRIBUTE_UNUSED, for (j = 0 ; j < i ; j++) VIR_FREE(xmlcpus[j]); VIR_FREE(xmlcpus); - return VIR_PY_NONE; + return NULL; } } } @@ -4565,9 +4569,6 @@ libvirt_virConnectBaselineCPU(PyObject *self ATTRIBUTE_UNUSED, pybase_cpu = libvirt_constcharPtrWrap(base_cpu); VIR_FREE(base_cpu); - if (pybase_cpu == NULL) - return VIR_PY_NONE; - return pybase_cpu; } @@ -4624,7 +4625,7 @@ libvirt_virDomainGetJobStats(PyObject *self ATTRIBUTE_UNUSED, if (!PyArg_ParseTuple(args, (char *) "OI:virDomainGetJobStats", &pyobj_domain, &flags)) - goto cleanup; + return NULL; domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain); LIBVIRT_BEGIN_ALLOW_THREADS; @@ -4645,10 +4646,7 @@ libvirt_virDomainGetJobStats(PyObject *self ATTRIBUTE_UNUSED, cleanup: virTypedParamsFree(params, nparams); - if (dict) - return dict; - else - return VIR_PY_NONE; + return dict; } #endif /* LIBVIR_CHECK_VERSION(1, 0, 3) */ @@ -4906,7 +4904,7 @@ libvirt_virDomainInterfaceAddresses(PyObject *self ATTRIBUTE_UNUSED, if (!PyArg_ParseTuple(args, (char *) "Oii:virDomainInterfaceAddresses", &pyobj_domain, &source, &flags)) - goto error; + return NULL; domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain); @@ -5142,10 +5140,8 @@ libvirt_virConnectDomainEventRegister(ATTRIBUTE_UNUSED PyObject *self, int ret = 0; if (!PyArg_ParseTuple(args, (char *) "OO:virConnectDomainEventRegister", - &pyobj_conn, &pyobj_conn_inst)) { - DEBUG("%s failed parsing tuple\n", __FUNCTION__); - return VIR_PY_INT_FAIL; - } + &pyobj_conn, &pyobj_conn_inst)) + return NULL; DEBUG("libvirt_virConnectDomainEventRegister(%p %p) called\n", pyobj_conn, pyobj_conn_inst); @@ -5490,7 +5486,7 @@ libvirt_virEventRegisterImpl(PyObject * self ATTRIBUTE_UNUSED, !PyCallable_Check(addTimeoutObj) || !PyCallable_Check(updateTimeoutObj) || !PyCallable_Check(removeTimeoutObj)) - return VIR_PY_INT_FAIL; + return NULL; /* Get argument string representations (for error reporting) */ addHandleName = py_str(addHandleObj); @@ -5539,7 +5535,7 @@ libvirt_virEventInvokeHandleCallback(PyObject *self ATTRIBUTE_UNUSED, if (!PyArg_ParseTuple(args, (char *) "iiiOO:virEventInvokeHandleCallback", &watch, &fd, &event, &py_f, &py_opaque)) - return VIR_PY_INT_FAIL; + return NULL; cb = (virEventHandleCallback) PyvirEventHandleCallback_Get(py_f); opaque = (void *) PyvirVoidPtr_Get(py_opaque); @@ -5565,7 +5561,7 @@ libvirt_virEventInvokeTimeoutCallback(PyObject *self ATTRIBUTE_UNUSED, if (!PyArg_ParseTuple(args, (char *) "iOO:virEventInvokeTimeoutCallback", &timer, &py_f, &py_opaque)) - return VIR_PY_INT_FAIL; + return NULL; cb = (virEventTimeoutCallback) PyvirEventTimeoutCallback_Get(py_f); opaque = (void *) PyvirVoidPtr_Get(py_opaque); @@ -5628,10 +5624,8 @@ libvirt_virEventAddHandle(PyObject *self ATTRIBUTE_UNUSED, int ret; if (!PyArg_ParseTuple(args, (char *) "iiO:virEventAddHandle", - &fd, &events, &pyobj_cbData)) { - DEBUG("%s failed to parse tuple\n", __FUNCTION__); - return VIR_PY_INT_FAIL; - } + &fd, &events, &pyobj_cbData)) + return NULL; Py_INCREF(pyobj_cbData); @@ -5694,10 +5688,8 @@ libvirt_virEventAddTimeout(PyObject *self ATTRIBUTE_UNUSED, int ret; if (!PyArg_ParseTuple(args, (char *) "iO:virEventAddTimeout", - &timeout, &pyobj_cbData)) { - DEBUG("%s failed to parse tuple\n", __FUNCTION__); - return VIR_PY_INT_FAIL; - } + &timeout, &pyobj_cbData)) + return NULL; Py_INCREF(pyobj_cbData); @@ -6739,10 +6731,8 @@ libvirt_virConnectDomainEventRegisterAny(PyObject *self ATTRIBUTE_UNUSED, if (!PyArg_ParseTuple(args, (char *) "OOiO:virConnectDomainEventRegisterAny", - &pyobj_conn, &pyobj_dom, &eventID, &pyobj_cbData)) { - DEBUG("%s failed parsing tuple\n", __FUNCTION__); - return VIR_PY_INT_FAIL; - } + &pyobj_conn, &pyobj_dom, &eventID, &pyobj_cbData)) + return NULL; DEBUG("libvirt_virConnectDomainEventRegister(%p %p %d %p) called\n", pyobj_conn, pyobj_dom, eventID, pyobj_cbData); @@ -6956,10 +6946,8 @@ libvirt_virConnectNetworkEventRegisterAny(PyObject *self ATTRIBUTE_UNUSED, if (!PyArg_ParseTuple(args, (char *) "OOiO:virConnectNetworkEventRegisterAny", - &pyobj_conn, &pyobj_net, &eventID, &pyobj_cbData)) { - DEBUG("%s failed parsing tuple\n", __FUNCTION__); - return VIR_PY_INT_FAIL; - } + &pyobj_conn, &pyobj_net, &eventID, &pyobj_cbData)) + return NULL; DEBUG("libvirt_virConnectNetworkEventRegister(%p %p %d %p) called\n", pyobj_conn, pyobj_net, eventID, pyobj_cbData); @@ -7075,10 +7063,8 @@ libvirt_virConnectRegisterCloseCallback(PyObject * self ATTRIBUTE_UNUSED, int ret = 0; if (!PyArg_ParseTuple(args, (char *) "OO:virConnectRegisterCloseCallback", - &pyobj_conn, &pyobj_cbData)) { - DEBUG("%s failed parsing tuple\n", __FUNCTION__); - return VIR_PY_INT_FAIL; - } + &pyobj_conn, &pyobj_cbData)) + return NULL; DEBUG("libvirt_virConnectRegisterCloseCallback(%p %p) called\n", pyobj_conn, pyobj_cbData); @@ -7187,10 +7173,8 @@ libvirt_virStreamEventAddCallback(PyObject *self ATTRIBUTE_UNUSED, int events; if (!PyArg_ParseTuple(args, (char *) "OiO:virStreamEventAddCallback", - &pyobj_stream, &events, &pyobj_cbData)) { - DEBUG("%s failed to parse tuple\n", __FUNCTION__); - return VIR_PY_INT_FAIL; - } + &pyobj_stream, &events, &pyobj_cbData)) + return NULL; DEBUG("libvirt_virStreamEventAddCallback(%p, %d, %p) called\n", pyobj_stream, events, pyobj_cbData); @@ -7224,8 +7208,7 @@ libvirt_virStreamRecv(PyObject *self ATTRIBUTE_UNUSED, if (!PyArg_ParseTuple(args, (char *) "Oi:virStreamRecv", &pyobj_stream, &nbytes)) { - DEBUG("%s failed to parse tuple\n", __FUNCTION__); - return VIR_PY_NONE; + return NULL; } stream = PyvirStream_Get(pyobj_stream); @@ -7261,10 +7244,9 @@ libvirt_virStreamSend(PyObject *self ATTRIBUTE_UNUSED, int ret; if (!PyArg_ParseTuple(args, (char *) "OO:virStreamRecv", - &pyobj_stream, &pyobj_data)) { - DEBUG("%s failed to parse tuple\n", __FUNCTION__); - return VIR_PY_INT_FAIL; - } + &pyobj_stream, &pyobj_data)) + return NULL; + stream = PyvirStream_Get(pyobj_stream); libvirt_charPtrSizeUnwrap(pyobj_data, &data, &datalen); @@ -7296,10 +7278,9 @@ libvirt_virDomainSendKey(PyObject *self ATTRIBUTE_UNUSED, if (!PyArg_ParseTuple(args, (char *)"OiiOiI:virDomainSendKey", &pyobj_domain, &codeset, &holdtime, &pyobj_list, - &nkeycodes, &flags)) { - DEBUG("%s failed to parse tuple\n", __FUNCTION__); - return VIR_PY_INT_FAIL; - } + &nkeycodes, &flags)) + return NULL; + domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain); if (!PyList_Check(pyobj_list)) { @@ -7340,7 +7321,7 @@ libvirt_virDomainMigrateGetCompressionCache(PyObject *self ATTRIBUTE_UNUSED, if (!PyArg_ParseTuple(args, (char *) "OI:virDomainMigrateGetCompressionCache", &pyobj_domain, &flags)) - return VIR_PY_NONE; + return NULL; domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain); @@ -8145,24 +8126,24 @@ libvirt_virNetworkGetDHCPLeases(PyObject *self ATTRIBUTE_UNUSED, } if (!(py_retval = PyList_New(leases_count))) - goto no_memory; + goto error; for (i = 0; i < leases_count; i++) { virNetworkDHCPLeasePtr lease = leases[i]; if ((py_lease = PyDict_New()) == NULL) - goto no_memory; + goto error; #define VIR_SET_LEASE_ITEM(NAME, VALUE_OBJ_FUNC) \ do { \ PyObject *tmp_val; \ \ if (!(tmp_val = VALUE_OBJ_FUNC)) \ - goto no_memory; \ + goto error; \ \ if (PyDict_SetItemString(py_lease, NAME, tmp_val) < 0) { \ Py_DECREF(tmp_val); \ - goto no_memory; \ + goto error; \ } \ } while (0) @@ -8179,7 +8160,7 @@ libvirt_virNetworkGetDHCPLeases(PyObject *self ATTRIBUTE_UNUSED, #undef VIR_SET_LEASE_ITEM if (PyList_SetItem(py_retval, i, py_lease) < 0) - goto no_memory; + goto error; py_lease = NULL; } @@ -8194,9 +8175,9 @@ libvirt_virNetworkGetDHCPLeases(PyObject *self ATTRIBUTE_UNUSED, return py_retval; - no_memory: + error: Py_XDECREF(py_retval); - py_retval = PyErr_NoMemory(); + py_retval = NULL; goto cleanup; } @@ -8283,8 +8264,7 @@ libvirt_virConnectGetAllDomainStats(PyObject *self ATTRIBUTE_UNUSED, if (nrecords < 0) return VIR_PY_NONE; - if (!(py_retval = convertDomainStatsRecord(records, nrecords))) - py_retval = VIR_PY_NONE; + py_retval = convertDomainStatsRecord(records, nrecords); virDomainStatsRecordListFree(records); @@ -8330,8 +8310,7 @@ libvirt_virDomainListGetStats(PyObject *self ATTRIBUTE_UNUSED, goto cleanup; } - if (!(py_retval = convertDomainStatsRecord(records, nrecords))) - py_retval = VIR_PY_NONE; + py_retval = convertDomainStatsRecord(records, nrecords); cleanup: virDomainStatsRecordListFree(records); @@ -8358,11 +8337,11 @@ libvirt_virDomainBlockCopy(PyObject *self ATTRIBUTE_UNUSED, if (!PyArg_ParseTuple(args, (char *) "Ozz|OI:virDomainBlockCopy", &pyobj_dom, &disk, &destxml, &pyobj_dict, &flags)) - return VIR_PY_INT_FAIL; + return NULL; if (PyDict_Check(pyobj_dict)) { if (virPyDictToTypedParams(pyobj_dict, ¶ms, &nparams, NULL, 0) < 0) - return VIR_PY_INT_FAIL; + return NULL; } dom = (virDomainPtr) PyvirDomain_Get(pyobj_dom); @@ -8505,7 +8484,7 @@ libvirt_virDomainGetFSInfo(PyObject *self ATTRIBUTE_UNUSED, virDomainFSInfoFree(fsinfo[i]); VIR_FREE(fsinfo); Py_XDECREF(py_retval); - return VIR_PY_NONE; + return NULL; } #endif /* LIBVIR_CHECK_VERSION(1, 2, 11) */ diff --git a/libvirt-qemu-override.c b/libvirt-qemu-override.c index 46d513d..f2e876a 100644 --- a/libvirt-qemu-override.c +++ b/libvirt-qemu-override.c @@ -271,10 +271,8 @@ libvirt_qemu_virConnectDomainQemuMonitorEventRegister(PyObject *self ATTRIBUTE_U unsigned int flags; if (!PyArg_ParseTuple(args, (char *) "OOzOI", &pyobj_conn, &pyobj_dom, - &event, &pyobj_cbData, &flags)) { - DEBUG("%s failed parsing tuple\n", __FUNCTION__); - return VIR_PY_INT_FAIL; - } + &event, &pyobj_cbData, &flags)) + return NULL; DEBUG("libvirt_qemu_virConnectDomainQemuMonitorEventRegister(%p %p %s %p %x) called\n", pyobj_conn, pyobj_dom, NULLSTR(event), pyobj_cbData, flags); -- 2.5.3

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@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, ¶ms, &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

This is a recommended work-flow for allocation failures and we should follow it. Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 53 +++++++++++++++++++++++++++++++---------------------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/libvirt-override.c b/libvirt-override.c index d137185..d2279de 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -2047,7 +2047,7 @@ libvirt_virConnectOpenAuth(PyObject *self ATTRIBUTE_UNUSED, if (auth.ncredtype) { size_t i; if (VIR_ALLOC_N(auth.credtype, auth.ncredtype) < 0) - return VIR_PY_NONE; + return PyErr_NoMemory(); for (i = 0; i < auth.ncredtype; i++) { PyObject *val; val = PyList_GetItem(pycredtype, i); @@ -2232,7 +2232,7 @@ libvirt_virConnectListDomainsID(PyObject *self ATTRIBUTE_UNUSED, if (c_retval) { if (VIR_ALLOC_N(ids, c_retval) < 0) - return VIR_PY_NONE; + return PyErr_NoMemory(); LIBVIRT_BEGIN_ALLOW_THREADS; c_retval = virConnectListDomains(conn, ids, c_retval); @@ -2328,7 +2328,7 @@ libvirt_virConnectListDefinedDomains(PyObject *self ATTRIBUTE_UNUSED, if (c_retval) { if (VIR_ALLOC_N(names, c_retval) < 0) - return VIR_PY_NONE; + return PyErr_NoMemory(); LIBVIRT_BEGIN_ALLOW_THREADS; c_retval = virConnectListDefinedDomains(conn, names, c_retval); LIBVIRT_END_ALLOW_THREADS; @@ -2950,7 +2950,7 @@ libvirt_virConnectListNetworks(PyObject *self ATTRIBUTE_UNUSED, if (c_retval) { if (VIR_ALLOC_N(names, c_retval) < 0) - return VIR_PY_NONE; + return PyErr_NoMemory(); LIBVIRT_BEGIN_ALLOW_THREADS; c_retval = virConnectListNetworks(conn, names, c_retval); LIBVIRT_END_ALLOW_THREADS; @@ -2998,7 +2998,7 @@ libvirt_virConnectListDefinedNetworks(PyObject *self ATTRIBUTE_UNUSED, if (c_retval) { if (VIR_ALLOC_N(names, c_retval) < 0) - return VIR_PY_NONE; + return PyErr_NoMemory(); LIBVIRT_BEGIN_ALLOW_THREADS; c_retval = virConnectListDefinedNetworks(conn, names, c_retval); LIBVIRT_END_ALLOW_THREADS; @@ -3223,7 +3223,7 @@ libvirt_virNodeGetCellsFreeMemory(PyObject *self ATTRIBUTE_UNUSED, conn = (virConnectPtr) PyvirConnect_Get(pyobj_conn); if (VIR_ALLOC_N(freeMems, maxCells) < 0) - return VIR_PY_NONE; + return PyErr_NoMemory(); LIBVIRT_BEGIN_ALLOW_THREADS; c_retval = virNodeGetCellsFreeMemory(conn, freeMems, startCell, maxCells); @@ -3398,7 +3398,7 @@ libvirt_virConnectListStoragePools(PyObject *self ATTRIBUTE_UNUSED, if (c_retval) { if (VIR_ALLOC_N(names, c_retval) < 0) - return VIR_PY_NONE; + return PyErr_NoMemory(); LIBVIRT_BEGIN_ALLOW_THREADS; c_retval = virConnectListStoragePools(conn, names, c_retval); LIBVIRT_END_ALLOW_THREADS; @@ -3453,7 +3453,7 @@ libvirt_virConnectListDefinedStoragePools(PyObject *self ATTRIBUTE_UNUSED, if (c_retval) { if (VIR_ALLOC_N(names, c_retval) < 0) - return VIR_PY_NONE; + return PyErr_NoMemory(); LIBVIRT_BEGIN_ALLOW_THREADS; c_retval = virConnectListDefinedStoragePools(conn, names, c_retval); LIBVIRT_END_ALLOW_THREADS; @@ -3556,7 +3556,8 @@ libvirt_virStoragePoolListVolumes(PyObject *self ATTRIBUTE_UNUSED, if (c_retval) { if (VIR_ALLOC_N(names, c_retval) < 0) - return VIR_PY_NONE; + return PyErr_NoMemory(); + LIBVIRT_BEGIN_ALLOW_THREADS; c_retval = virStoragePoolListVolumes(pool, names, c_retval); LIBVIRT_END_ALLOW_THREADS; @@ -3836,7 +3837,8 @@ libvirt_virNodeListDevices(PyObject *self ATTRIBUTE_UNUSED, if (c_retval) { if (VIR_ALLOC_N(names, c_retval) < 0) - return VIR_PY_NONE; + return PyErr_NoMemory(); + LIBVIRT_BEGIN_ALLOW_THREADS; c_retval = virNodeListDevices(conn, cap, names, c_retval, flags); LIBVIRT_END_ALLOW_THREADS; @@ -3930,7 +3932,7 @@ libvirt_virNodeDeviceListCaps(PyObject *self ATTRIBUTE_UNUSED, if (c_retval) { if (VIR_ALLOC_N(names, c_retval) < 0) - return VIR_PY_NONE; + return PyErr_NoMemory(); LIBVIRT_BEGIN_ALLOW_THREADS; c_retval = virNodeDeviceListCaps(dev, names, c_retval); LIBVIRT_END_ALLOW_THREADS; @@ -4057,7 +4059,7 @@ libvirt_virConnectListSecrets(PyObject *self ATTRIBUTE_UNUSED, if (c_retval) { if (VIR_ALLOC_N(uuids, c_retval) < 0) - return VIR_PY_NONE; + return PyErr_NoMemory(); LIBVIRT_BEGIN_ALLOW_THREADS; c_retval = virConnectListSecrets(conn, uuids, c_retval); LIBVIRT_END_ALLOW_THREADS; @@ -4290,7 +4292,8 @@ libvirt_virConnectListNWFilters(PyObject *self ATTRIBUTE_UNUSED, if (c_retval) { if (VIR_ALLOC_N(uuids, c_retval) < 0) - return VIR_PY_NONE; + return PyErr_NoMemory(); + LIBVIRT_BEGIN_ALLOW_THREADS; c_retval = virConnectListNWFilters(conn, uuids, c_retval); LIBVIRT_END_ALLOW_THREADS; @@ -4386,7 +4389,8 @@ libvirt_virConnectListInterfaces(PyObject *self ATTRIBUTE_UNUSED, if (c_retval) { if (VIR_ALLOC_N(names, c_retval) < 0) - return VIR_PY_NONE; + return PyErr_NoMemory(); + LIBVIRT_BEGIN_ALLOW_THREADS; c_retval = virConnectListInterfaces(conn, names, c_retval); LIBVIRT_END_ALLOW_THREADS; @@ -4442,7 +4446,8 @@ libvirt_virConnectListDefinedInterfaces(PyObject *self ATTRIBUTE_UNUSED, if (c_retval) { if (VIR_ALLOC_N(names, c_retval) < 0) - return VIR_PY_NONE; + return PyErr_NoMemory(); + LIBVIRT_BEGIN_ALLOW_THREADS; c_retval = virConnectListDefinedInterfaces(conn, names, c_retval); LIBVIRT_END_ALLOW_THREADS; @@ -4544,7 +4549,7 @@ libvirt_virConnectBaselineCPU(PyObject *self ATTRIBUTE_UNUSED, if (PyList_Check(list)) { ncpus = PyList_Size(list); if (VIR_ALLOC_N(xmlcpus, ncpus) < 0) - return VIR_PY_NONE; + return PyErr_NoMemory(); for (i = 0; i < ncpus; i++) { if (libvirt_charPtrUnwrap(PyList_GetItem(list, i), @@ -4862,7 +4867,7 @@ libvirt_virDomainGetDiskErrors(PyObject *self ATTRIBUTE_UNUSED, if (ndisks) { if (VIR_ALLOC_N(disks, ndisks) < 0) - return VIR_PY_NONE; + return PyErr_NoMemory(); LIBVIRT_BEGIN_ALLOW_THREADS; count = virDomainGetDiskErrors(domain, disks, ndisks, 0); @@ -7218,7 +7223,7 @@ libvirt_virStreamRecv(PyObject *self ATTRIBUTE_UNUSED, stream = PyvirStream_Get(pyobj_stream); if (VIR_ALLOC_N(buf, nbytes+1 > 0 ? nbytes+1 : 1) < 0) - return VIR_PY_NONE; + return PyErr_NoMemory(); LIBVIRT_BEGIN_ALLOW_THREADS; ret = virStreamRecv(stream, buf, nbytes); @@ -7453,7 +7458,7 @@ libvirt_virDomainBlockPeek(PyObject *self ATTRIBUTE_UNUSED, domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain); if (VIR_ALLOC_N(buf, size) < 0) - return VIR_PY_NONE; + return PyErr_NoMemory(); LIBVIRT_BEGIN_ALLOW_THREADS; c_retval = virDomainBlockPeek(domain, disk, offset, size, buf, flags); @@ -7491,7 +7496,7 @@ libvirt_virDomainMemoryPeek(PyObject *self ATTRIBUTE_UNUSED, domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain); if (VIR_ALLOC_N(buf, size) < 0) - return VIR_PY_NONE; + return PyErr_NoMemory(); LIBVIRT_BEGIN_ALLOW_THREADS; c_retval = virDomainMemoryPeek(domain, start, size, buf, flags); @@ -8034,8 +8039,12 @@ libvirt_virNodeGetFreePages(PyObject *self ATTRIBUTE_UNUSED, pyobj_pagesize_size = PyList_Size(pyobj_pagesize); if (VIR_ALLOC_N(pages, pyobj_pagesize_size) < 0 || - VIR_ALLOC_N(counts, pyobj_pagesize_size * cellCount) < 0 || - !(pyobj_counts = PyDict_New())) + VIR_ALLOC_N(counts, pyobj_pagesize_size * cellCount) < 0) { + PyErr_NoMemory(); + goto cleanup; + } + + if (!(pyobj_counts = PyDict_New())) goto cleanup; for (i = 0; i < pyobj_pagesize_size; i++) { -- 2.5.3

Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 9 +++------ typewrappers.c | 54 ++++++++++++++++++------------------------------------ 2 files changed, 21 insertions(+), 42 deletions(-) diff --git a/libvirt-override.c b/libvirt-override.c index d2279de..4d0fb92 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -1960,7 +1960,6 @@ virConnectCredCallbackWrapper(virConnectCredentialPtr cred, for (i = 0; i < ncred; i++) { PyObject *pycreditem; pycreditem = PyList_New(5); - Py_INCREF(Py_None); PyTuple_SetItem(pycred, i, pycreditem); PyList_SetItem(pycreditem, 0, libvirt_intWrap((long) cred[i].type)); PyList_SetItem(pycreditem, 1, libvirt_constcharPtrWrap(cred[i].prompt)); @@ -1968,17 +1967,15 @@ virConnectCredCallbackWrapper(virConnectCredentialPtr cred, PyList_SetItem(pycreditem, 2, libvirt_constcharPtrWrap(cred[i].challenge)); } else { - Py_INCREF(Py_None); - PyList_SetItem(pycreditem, 2, Py_None); + PyList_SetItem(pycreditem, 2, VIR_PY_NONE); } if (cred[i].defresult) { PyList_SetItem(pycreditem, 3, libvirt_constcharPtrWrap(cred[i].defresult)); } else { - Py_INCREF(Py_None); - PyList_SetItem(pycreditem, 3, Py_None); + PyList_SetItem(pycreditem, 3, VIR_PY_NONE); } - PyList_SetItem(pycreditem, 4, Py_None); + PyList_SetItem(pycreditem, 4, VIR_PY_NONE); } PyTuple_SetItem(list, 0, pycred); diff --git a/typewrappers.c b/typewrappers.c index 6507e0f..246f8af 100644 --- a/typewrappers.c +++ b/typewrappers.c @@ -97,8 +97,7 @@ libvirt_charPtrSizeWrap(char *str, Py_ssize_t size) PyObject *ret; if (str == NULL) { - Py_INCREF(Py_None); - return Py_None; + return VIR_PY_NONE; } #if PY_MAJOR_VERSION > 2 ret = PyBytes_FromStringAndSize(str, size); @@ -114,8 +113,7 @@ libvirt_charPtrWrap(char *str) PyObject *ret; if (str == NULL) { - Py_INCREF(Py_None); - return Py_None; + return VIR_PY_NONE; } #if PY_MAJOR_VERSION > 2 ret = PyUnicode_FromString(str); @@ -131,8 +129,7 @@ libvirt_constcharPtrWrap(const char *str) PyObject *ret; if (str == NULL) { - Py_INCREF(Py_None); - return Py_None; + return VIR_PY_NONE; } #if PY_MAJOR_VERSION > 2 ret = PyUnicode_FromString(str); @@ -420,8 +417,7 @@ libvirt_virDomainPtrWrap(virDomainPtr node) PyObject *ret; if (node == NULL) { - Py_INCREF(Py_None); - return Py_None; + return VIR_PY_NONE; } ret = libvirt_buildPyObject(node, "virDomainPtr", NULL); @@ -434,8 +430,7 @@ libvirt_virNetworkPtrWrap(virNetworkPtr node) PyObject *ret; if (node == NULL) { - Py_INCREF(Py_None); - return Py_None; + return VIR_PY_NONE; } ret = libvirt_buildPyObject(node, "virNetworkPtr", NULL); @@ -448,8 +443,7 @@ libvirt_virInterfacePtrWrap(virInterfacePtr node) PyObject *ret; if (node == NULL) { - Py_INCREF(Py_None); - return Py_None; + return VIR_PY_NONE; } ret = libvirt_buildPyObject(node, "virInterfacePtr", NULL); @@ -462,8 +456,7 @@ libvirt_virStoragePoolPtrWrap(virStoragePoolPtr node) PyObject *ret; if (node == NULL) { - Py_INCREF(Py_None); - return Py_None; + return VIR_PY_NONE; } ret = libvirt_buildPyObject(node, "virStoragePoolPtr", NULL); @@ -476,8 +469,7 @@ libvirt_virStorageVolPtrWrap(virStorageVolPtr node) PyObject *ret; if (node == NULL) { - Py_INCREF(Py_None); - return Py_None; + return VIR_PY_NONE; } ret = libvirt_buildPyObject(node, "virStorageVolPtr", NULL); @@ -490,8 +482,7 @@ libvirt_virConnectPtrWrap(virConnectPtr node) PyObject *ret; if (node == NULL) { - Py_INCREF(Py_None); - return Py_None; + return VIR_PY_NONE; } ret = libvirt_buildPyObject(node, "virConnectPtr", NULL); @@ -504,8 +495,7 @@ libvirt_virNodeDevicePtrWrap(virNodeDevicePtr node) PyObject *ret; if (node == NULL) { - Py_INCREF(Py_None); - return Py_None; + return VIR_PY_NONE; } ret = libvirt_buildPyObject(node, "virNodeDevicePtr", NULL); @@ -518,8 +508,7 @@ libvirt_virSecretPtrWrap(virSecretPtr node) PyObject *ret; if (node == NULL) { - Py_INCREF(Py_None); - return Py_None; + return VIR_PY_NONE; } ret = libvirt_buildPyObject(node, "virSecretPtr", NULL); @@ -532,8 +521,7 @@ libvirt_virNWFilterPtrWrap(virNWFilterPtr node) PyObject *ret; if (node == NULL) { - Py_INCREF(Py_None); - return Py_None; + return VIR_PY_NONE; } ret = libvirt_buildPyObject(node, "virNWFilterPtr", NULL); @@ -546,8 +534,7 @@ libvirt_virStreamPtrWrap(virStreamPtr node) PyObject *ret; if (node == NULL) { - Py_INCREF(Py_None); - return Py_None; + return VIR_PY_NONE; } ret = libvirt_buildPyObject(node, "virStreamPtr", NULL); @@ -560,8 +547,7 @@ libvirt_virDomainSnapshotPtrWrap(virDomainSnapshotPtr node) PyObject *ret; if (node == NULL) { - Py_INCREF(Py_None); - return Py_None; + return VIR_PY_NONE; } ret = libvirt_buildPyObject(node, "virDomainSnapshotPtr", NULL); @@ -574,9 +560,8 @@ libvirt_virEventHandleCallbackWrap(virEventHandleCallback node) PyObject *ret; if (node == NULL) { - Py_INCREF(Py_None); printf("%s: WARNING - Wrapping None\n", __func__); - return Py_None; + return VIR_PY_NONE; } ret = libvirt_buildPyObject(node, "virEventHandleCallback", NULL); @@ -590,8 +575,7 @@ libvirt_virEventTimeoutCallbackWrap(virEventTimeoutCallback node) if (node == NULL) { printf("%s: WARNING - Wrapping None\n", __func__); - Py_INCREF(Py_None); - return Py_None; + return VIR_PY_NONE; } ret = libvirt_buildPyObject(node, "virEventTimeoutCallback", NULL); @@ -604,8 +588,7 @@ libvirt_virFreeCallbackWrap(virFreeCallback node) PyObject *ret; if (node == NULL) { - Py_INCREF(Py_None); - return Py_None; + return VIR_PY_NONE; } ret = libvirt_buildPyObject(node, "virFreeCallback", NULL); @@ -618,8 +601,7 @@ libvirt_virVoidPtrWrap(void* node) PyObject *ret; if (node == NULL) { - Py_INCREF(Py_None); - return Py_None; + return VIR_PY_NONE; } ret = libvirt_buildPyObject(node, "void*", NULL); -- 2.5.3

in the subject "instead of Py_None" and perhaps a few more details in the commit message regarding what's being done and why On 09/24/2015 10:01 AM, Pavel Hrdina wrote:
Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 9 +++------ typewrappers.c | 54 ++++++++++++++++++------------------------------------ 2 files changed, 21 insertions(+), 42 deletions(-)
diff --git a/libvirt-override.c b/libvirt-override.c index d2279de..4d0fb92 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -1960,7 +1960,6 @@ virConnectCredCallbackWrapper(virConnectCredentialPtr cred, for (i = 0; i < ncred; i++) { PyObject *pycreditem; pycreditem = PyList_New(5); - Py_INCREF(Py_None);
I'm curious as to why it was done before and why it's OK to remove it. The others mostly make sense - this functions usage is, well, odd John
PyTuple_SetItem(pycred, i, pycreditem); PyList_SetItem(pycreditem, 0, libvirt_intWrap((long) cred[i].type)); PyList_SetItem(pycreditem, 1, libvirt_constcharPtrWrap(cred[i].prompt)); @@ -1968,17 +1967,15 @@ virConnectCredCallbackWrapper(virConnectCredentialPtr cred, PyList_SetItem(pycreditem, 2, libvirt_constcharPtrWrap(cred[i].challenge)); } else { - Py_INCREF(Py_None); - PyList_SetItem(pycreditem, 2, Py_None); + PyList_SetItem(pycreditem, 2, VIR_PY_NONE); } if (cred[i].defresult) { PyList_SetItem(pycreditem, 3, libvirt_constcharPtrWrap(cred[i].defresult)); } else { - Py_INCREF(Py_None); - PyList_SetItem(pycreditem, 3, Py_None); + PyList_SetItem(pycreditem, 3, VIR_PY_NONE); } - PyList_SetItem(pycreditem, 4, Py_None); + PyList_SetItem(pycreditem, 4, VIR_PY_NONE); }
PyTuple_SetItem(list, 0, pycred); diff --git a/typewrappers.c b/typewrappers.c index 6507e0f..246f8af 100644 --- a/typewrappers.c +++ b/typewrappers.c @@ -97,8 +97,7 @@ libvirt_charPtrSizeWrap(char *str, Py_ssize_t size) PyObject *ret;
if (str == NULL) { - Py_INCREF(Py_None); - return Py_None; + return VIR_PY_NONE; } #if PY_MAJOR_VERSION > 2 ret = PyBytes_FromStringAndSize(str, size); @@ -114,8 +113,7 @@ libvirt_charPtrWrap(char *str) PyObject *ret;
if (str == NULL) { - Py_INCREF(Py_None); - return Py_None; + return VIR_PY_NONE; } #if PY_MAJOR_VERSION > 2 ret = PyUnicode_FromString(str); @@ -131,8 +129,7 @@ libvirt_constcharPtrWrap(const char *str) PyObject *ret;
if (str == NULL) { - Py_INCREF(Py_None); - return Py_None; + return VIR_PY_NONE; } #if PY_MAJOR_VERSION > 2 ret = PyUnicode_FromString(str); @@ -420,8 +417,7 @@ libvirt_virDomainPtrWrap(virDomainPtr node) PyObject *ret;
if (node == NULL) { - Py_INCREF(Py_None); - return Py_None; + return VIR_PY_NONE; }
ret = libvirt_buildPyObject(node, "virDomainPtr", NULL); @@ -434,8 +430,7 @@ libvirt_virNetworkPtrWrap(virNetworkPtr node) PyObject *ret;
if (node == NULL) { - Py_INCREF(Py_None); - return Py_None; + return VIR_PY_NONE; }
ret = libvirt_buildPyObject(node, "virNetworkPtr", NULL); @@ -448,8 +443,7 @@ libvirt_virInterfacePtrWrap(virInterfacePtr node) PyObject *ret;
if (node == NULL) { - Py_INCREF(Py_None); - return Py_None; + return VIR_PY_NONE; }
ret = libvirt_buildPyObject(node, "virInterfacePtr", NULL); @@ -462,8 +456,7 @@ libvirt_virStoragePoolPtrWrap(virStoragePoolPtr node) PyObject *ret;
if (node == NULL) { - Py_INCREF(Py_None); - return Py_None; + return VIR_PY_NONE; }
ret = libvirt_buildPyObject(node, "virStoragePoolPtr", NULL); @@ -476,8 +469,7 @@ libvirt_virStorageVolPtrWrap(virStorageVolPtr node) PyObject *ret;
if (node == NULL) { - Py_INCREF(Py_None); - return Py_None; + return VIR_PY_NONE; }
ret = libvirt_buildPyObject(node, "virStorageVolPtr", NULL); @@ -490,8 +482,7 @@ libvirt_virConnectPtrWrap(virConnectPtr node) PyObject *ret;
if (node == NULL) { - Py_INCREF(Py_None); - return Py_None; + return VIR_PY_NONE; }
ret = libvirt_buildPyObject(node, "virConnectPtr", NULL); @@ -504,8 +495,7 @@ libvirt_virNodeDevicePtrWrap(virNodeDevicePtr node) PyObject *ret;
if (node == NULL) { - Py_INCREF(Py_None); - return Py_None; + return VIR_PY_NONE; }
ret = libvirt_buildPyObject(node, "virNodeDevicePtr", NULL); @@ -518,8 +508,7 @@ libvirt_virSecretPtrWrap(virSecretPtr node) PyObject *ret;
if (node == NULL) { - Py_INCREF(Py_None); - return Py_None; + return VIR_PY_NONE; }
ret = libvirt_buildPyObject(node, "virSecretPtr", NULL); @@ -532,8 +521,7 @@ libvirt_virNWFilterPtrWrap(virNWFilterPtr node) PyObject *ret;
if (node == NULL) { - Py_INCREF(Py_None); - return Py_None; + return VIR_PY_NONE; }
ret = libvirt_buildPyObject(node, "virNWFilterPtr", NULL); @@ -546,8 +534,7 @@ libvirt_virStreamPtrWrap(virStreamPtr node) PyObject *ret;
if (node == NULL) { - Py_INCREF(Py_None); - return Py_None; + return VIR_PY_NONE; }
ret = libvirt_buildPyObject(node, "virStreamPtr", NULL); @@ -560,8 +547,7 @@ libvirt_virDomainSnapshotPtrWrap(virDomainSnapshotPtr node) PyObject *ret;
if (node == NULL) { - Py_INCREF(Py_None); - return Py_None; + return VIR_PY_NONE; }
ret = libvirt_buildPyObject(node, "virDomainSnapshotPtr", NULL); @@ -574,9 +560,8 @@ libvirt_virEventHandleCallbackWrap(virEventHandleCallback node) PyObject *ret;
if (node == NULL) { - Py_INCREF(Py_None); printf("%s: WARNING - Wrapping None\n", __func__); - return Py_None; + return VIR_PY_NONE; }
ret = libvirt_buildPyObject(node, "virEventHandleCallback", NULL); @@ -590,8 +575,7 @@ libvirt_virEventTimeoutCallbackWrap(virEventTimeoutCallback node)
if (node == NULL) { printf("%s: WARNING - Wrapping None\n", __func__); - Py_INCREF(Py_None); - return Py_None; + return VIR_PY_NONE; }
ret = libvirt_buildPyObject(node, "virEventTimeoutCallback", NULL); @@ -604,8 +588,7 @@ libvirt_virFreeCallbackWrap(virFreeCallback node) PyObject *ret;
if (node == NULL) { - Py_INCREF(Py_None); - return Py_None; + return VIR_PY_NONE; }
ret = libvirt_buildPyObject(node, "virFreeCallback", NULL); @@ -618,8 +601,7 @@ libvirt_virVoidPtrWrap(void* node) PyObject *ret;
if (node == NULL) { - Py_INCREF(Py_None); - return Py_None; + return VIR_PY_NONE; }
ret = libvirt_buildPyObject(node, "void*", NULL);

On Sat, Sep 26, 2015 at 09:24:30AM -0400, John Ferlan wrote:
in the subject "instead of Py_None"
and perhaps a few more details in the commit message regarding what's being done and why
Thanks, I'll update the commit message.
On 09/24/2015 10:01 AM, Pavel Hrdina wrote:
Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 9 +++------ typewrappers.c | 54 ++++++++++++++++++------------------------------------ 2 files changed, 21 insertions(+), 42 deletions(-)
diff --git a/libvirt-override.c b/libvirt-override.c index d2279de..4d0fb92 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -1960,7 +1960,6 @@ virConnectCredCallbackWrapper(virConnectCredentialPtr cred, for (i = 0; i < ncred; i++) { PyObject *pycreditem; pycreditem = PyList_New(5); - Py_INCREF(Py_None);
I'm curious as to why it was done before and why it's OK to remove it. The others mostly make sense - this functions usage is, well, odd
This first increment of Py_None is used there [1] ...
John
PyTuple_SetItem(pycred, i, pycreditem); PyList_SetItem(pycreditem, 0, libvirt_intWrap((long) cred[i].type)); PyList_SetItem(pycreditem, 1, libvirt_constcharPtrWrap(cred[i].prompt)); @@ -1968,17 +1967,15 @@ virConnectCredCallbackWrapper(virConnectCredentialPtr cred, PyList_SetItem(pycreditem, 2, libvirt_constcharPtrWrap(cred[i].challenge)); } else { - Py_INCREF(Py_None); - PyList_SetItem(pycreditem, 2, Py_None); + PyList_SetItem(pycreditem, 2, VIR_PY_NONE); } if (cred[i].defresult) { PyList_SetItem(pycreditem, 3, libvirt_constcharPtrWrap(cred[i].defresult)); } else { - Py_INCREF(Py_None); - PyList_SetItem(pycreditem, 3, Py_None); + PyList_SetItem(pycreditem, 3, VIR_PY_NONE); } - PyList_SetItem(pycreditem, 4, Py_None); + PyList_SetItem(pycreditem, 4, VIR_PY_NONE);
[1], the other increments are directly before using the Py_None object. Pavel
}
PyTuple_SetItem(list, 0, pycred);
[...]

Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 69 ++++++++++++++++++------------------------------------ 1 file changed, 23 insertions(+), 46 deletions(-) diff --git a/libvirt-override.c b/libvirt-override.c index 4d0fb92..0df6844 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -405,14 +405,11 @@ libvirt_virDomainMemoryStats(PyObject *self ATTRIBUTE_UNUSED, val = libvirt_ulonglongWrap(stats[i].val); if (!key || !val || PyDict_SetItem(info, key, val) < 0) { - Py_DECREF(info); - info = NULL; + Py_CLEAR(info); goto cleanup; } - Py_DECREF(key); - Py_DECREF(val); - key = NULL; - val = NULL; + Py_CLEAR(key); + Py_CLEAR(val); } cleanup: @@ -2174,8 +2171,7 @@ libvirt_virConnectGetCPUModelNames(PyObject *self ATTRIBUTE_UNUSED, return rv; error: - Py_XDECREF(rv); - rv = NULL; + Py_CLEAR(rv); goto done; } #endif /* LIBVIR_CHECK_VERSION(1, 1, 3) */ @@ -2283,8 +2279,7 @@ libvirt_virConnectListAllDomains(PyObject *self ATTRIBUTE_UNUSED, if (!(tmp = libvirt_virDomainPtrWrap(doms[i])) || PyList_SetItem(py_retval, i, tmp) < 0) { Py_XDECREF(tmp); - Py_DECREF(py_retval); - py_retval = NULL; + Py_CLEAR(py_retval); goto cleanup; } /* python steals the pointer */ @@ -2390,8 +2385,7 @@ libvirt_virDomainSnapshotListNames(PyObject *self ATTRIBUTE_UNUSED, if ((pyobj_snap = libvirt_constcharPtrWrap(names[i])) == NULL || PyList_SetItem(py_retval, i, pyobj_snap) < 0) { Py_XDECREF(pyobj_snap); - Py_DECREF(py_retval); - py_retval = NULL; + Py_CLEAR(py_retval); goto cleanup; } VIR_FREE(names[i]); @@ -2436,8 +2430,7 @@ libvirt_virDomainListAllSnapshots(PyObject *self ATTRIBUTE_UNUSED, if ((pyobj_snap = libvirt_virDomainSnapshotPtrWrap(snaps[i])) == NULL || PyList_SetItem(py_retval, i, pyobj_snap) < 0) { Py_XDECREF(pyobj_snap); - Py_DECREF(py_retval); - py_retval = NULL; + Py_CLEAR(py_retval); goto cleanup; } snaps[i] = NULL; @@ -2493,8 +2486,7 @@ libvirt_virDomainSnapshotListChildrenNames(PyObject *self ATTRIBUTE_UNUSED, if ((pyobj_snap = libvirt_constcharPtrWrap(names[i])) == NULL || PyList_SetItem(py_retval, i, pyobj_snap) < 0) { Py_XDECREF(pyobj_snap); - Py_DECREF(py_retval); - py_retval = NULL; + Py_CLEAR(py_retval); goto cleanup; } VIR_FREE(names[i]); @@ -2539,8 +2531,7 @@ libvirt_virDomainSnapshotListAllChildren(PyObject *self ATTRIBUTE_UNUSED, if ((pyobj_snap = libvirt_virDomainSnapshotPtrWrap(snaps[i])) == NULL || PyList_SetItem(py_retval, i, pyobj_snap) < 0) { Py_XDECREF(pyobj_snap); - Py_DECREF(py_retval); - py_retval = NULL; + Py_CLEAR(py_retval); goto cleanup; } snaps[i] = NULL; @@ -2834,8 +2825,7 @@ libvirt_virDomainGetSecurityLabelList(PyObject *self ATTRIBUTE_UNUSED, return py_retval; error: - Py_XDECREF(py_retval); - py_retval = NULL; + Py_CLEAR(py_retval); goto cleanup; } #endif /* LIBVIR_CHECK_VERSION(0, 10, 0) */ @@ -3049,8 +3039,7 @@ libvirt_virConnectListAllNetworks(PyObject *self ATTRIBUTE_UNUSED, if (!(tmp = libvirt_virNetworkPtrWrap(nets[i])) || PyList_SetItem(py_retval, i, tmp) < 0) { Py_XDECREF(tmp); - Py_DECREF(py_retval); - py_retval = NULL; + Py_CLEAR(py_retval); goto cleanup; } /* python steals the pointer */ @@ -3286,8 +3275,7 @@ libvirt_virNodeGetCPUStats(PyObject *self ATTRIBUTE_UNUSED, val = libvirt_ulonglongWrap(stats[i].value); if (!key || !val || PyDict_SetItem(ret, key, val) < 0) { - Py_DECREF(ret); - ret = NULL; + Py_CLEAR(ret); goto error; } @@ -3352,8 +3340,7 @@ libvirt_virNodeGetMemoryStats(PyObject *self ATTRIBUTE_UNUSED, val = libvirt_ulonglongWrap(stats[i].value); if (!key || !val || PyDict_SetItem(ret, key, val) < 0) { - Py_DECREF(ret); - ret = NULL; + Py_CLEAR(ret); goto error; } @@ -3512,8 +3499,7 @@ libvirt_virConnectListAllStoragePools(PyObject *self ATTRIBUTE_UNUSED, if (!(tmp = libvirt_virStoragePoolPtrWrap(pools[i])) || PyList_SetItem(py_retval, i, tmp) < 0) { Py_XDECREF(tmp); - Py_DECREF(py_retval); - py_retval = NULL; + Py_CLEAR(py_retval); goto cleanup; } /* python steals the pointer */ @@ -3617,8 +3603,7 @@ libvirt_virStoragePoolListAllVolumes(PyObject *self ATTRIBUTE_UNUSED, if (!(tmp = libvirt_virStorageVolPtrWrap(vols[i])) || PyList_SetItem(py_retval, i, tmp) < 0) { Py_XDECREF(tmp); - Py_DECREF(py_retval); - py_retval = NULL; + Py_CLEAR(py_retval); goto cleanup; } /* python steals the pointer */ @@ -3889,8 +3874,7 @@ libvirt_virConnectListAllNodeDevices(PyObject *self ATTRIBUTE_UNUSED, if (!(tmp = libvirt_virNodeDevicePtrWrap(devices[i])) || PyList_SetItem(py_retval, i, tmp) < 0) { Py_XDECREF(tmp); - Py_DECREF(py_retval); - py_retval = NULL; + Py_CLEAR(py_retval); goto cleanup; } /* python steals the pointer */ @@ -4110,8 +4094,7 @@ libvirt_virConnectListAllSecrets(PyObject *self ATTRIBUTE_UNUSED, if (!(tmp = libvirt_virSecretPtrWrap(secrets[i])) || PyList_SetItem(py_retval, i, tmp) < 0) { Py_XDECREF(tmp); - Py_DECREF(py_retval); - py_retval = NULL; + Py_CLEAR(py_retval); goto cleanup; } /* python steals the pointer */ @@ -4344,8 +4327,7 @@ libvirt_virConnectListAllNWFilters(PyObject *self ATTRIBUTE_UNUSED, if (!(tmp = libvirt_virNWFilterPtrWrap(filters[i])) || PyList_SetItem(py_retval, i, tmp) < 0) { Py_XDECREF(tmp); - Py_DECREF(py_retval); - py_retval = NULL; + Py_CLEAR(py_retval); goto cleanup; } /* python steals the pointer */ @@ -4507,8 +4489,7 @@ libvirt_virConnectListAllInterfaces(PyObject *self ATTRIBUTE_UNUSED, if (!(tmp = libvirt_virInterfacePtrWrap(ifaces[i])) || PyList_SetItem(py_retval, i, tmp) < 0) { Py_XDECREF(tmp); - Py_DECREF(py_retval); - py_retval = NULL; + Py_CLEAR(py_retval); goto cleanup; } /* python steals the pointer */ @@ -4644,8 +4625,7 @@ libvirt_virDomainGetJobStats(PyObject *self ATTRIBUTE_UNUSED, if (PyDict_SetItem(dict, libvirt_constcharPtrWrap("type"), libvirt_intWrap(type)) < 0) { - Py_DECREF(dict); - dict = NULL; + Py_CLEAR(dict); goto cleanup; } @@ -5012,8 +4992,7 @@ libvirt_virDomainInterfaceAddresses(PyObject *self ATTRIBUTE_UNUSED, return py_retval; error: - Py_XDECREF(py_retval); - py_retval = NULL; + Py_CLEAR(py_retval); goto cleanup; } #endif /* LIBVIR_CHECK_VERSION(1, 2, 14) */ @@ -7694,12 +7673,11 @@ libvirt_virNodeGetCPUMap(PyObject *self ATTRIBUTE_UNUSED, VIR_FREE(cpumap); return ret; error: - Py_XDECREF(ret); + Py_CLEAR(ret); Py_XDECREF(pycpumap); Py_XDECREF(pyused); Py_XDECREF(pycpunum); Py_XDECREF(pyonline); - ret = NULL; goto cleanup; } #endif /* LIBVIR_CHECK_VERSION(1, 0, 0) */ @@ -8187,8 +8165,7 @@ libvirt_virNetworkGetDHCPLeases(PyObject *self ATTRIBUTE_UNUSED, return py_retval; error: - Py_XDECREF(py_retval); - py_retval = NULL; + Py_CLEAR(py_retval); goto cleanup; } -- 2.5.3

If the function fails, we need to cleanup memory and return NULL. Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-lxc-override.c | 10 +- libvirt-override.c | 269 +++++++++++++++++++++++++++++++++---------------- 2 files changed, 190 insertions(+), 89 deletions(-) diff --git a/libvirt-lxc-override.c b/libvirt-lxc-override.c index 20d1cf4..b0550c7 100644 --- a/libvirt-lxc-override.c +++ b/libvirt-lxc-override.c @@ -79,7 +79,9 @@ libvirt_lxc_virDomainLxcOpenNamespace(PyObject *self ATTRIBUTE_UNUSED, if (c_retval < 0) return VIR_PY_NONE; - py_retval = PyList_New(0); + if ((py_retval = PyList_New(0)) == NULL) + goto error; + for (i = 0; i < c_retval; i++) { PyObject *item = NULL; @@ -91,6 +93,8 @@ libvirt_lxc_virDomainLxcOpenNamespace(PyObject *self ATTRIBUTE_UNUSED, goto error; } } + + cleanup: VIR_FREE(fdlist); return py_retval; @@ -98,8 +102,8 @@ libvirt_lxc_virDomainLxcOpenNamespace(PyObject *self ATTRIBUTE_UNUSED, for (i = 0; i < c_retval; i++) { VIR_FORCE_CLOSE(fdlist[i]); } - VIR_FREE(fdlist); - return NULL; + Py_CLEAR(py_retval); + goto cleanup; } /************************************************************************ * * diff --git a/libvirt-override.c b/libvirt-override.c index 0df6844..92c31b8 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -1859,7 +1859,7 @@ static void libvirt_virErrorFuncHandler(ATTRIBUTE_UNUSED void *ctx, virErrorPtr err) { - PyObject *list, *info; + PyObject *list = NULL, *info = NULL; PyObject *result; DEBUG("libvirt_virErrorFuncHandler(%p, %s, ...) called\n", ctx, @@ -1874,8 +1874,12 @@ libvirt_virErrorFuncHandler(ATTRIBUTE_UNUSED void *ctx, (libvirt_virPythonErrorFuncHandler == Py_None)) { virDefaultErrorFunc(err); } else { - list = PyTuple_New(2); - info = PyTuple_New(9); + if ((list = PyTuple_New(2)) == NULL) + goto cleanup; + + if ((info = PyTuple_New(9)) == NULL) + goto cleanup; + PyTuple_SetItem(list, 0, libvirt_virPythonErrorFuncCtxt); PyTuple_SetItem(list, 1, info); Py_XINCREF(libvirt_virPythonErrorFuncCtxt); @@ -1894,6 +1898,10 @@ libvirt_virErrorFuncHandler(ATTRIBUTE_UNUSED void *ctx, Py_XDECREF(result); } + cleanup: + Py_XDECREF(list); + Py_XDECREF(info); + LIBVIRT_RELEASE_THREAD_STATE; } @@ -1938,12 +1946,12 @@ virConnectCredCallbackWrapper(virConnectCredentialPtr cred, unsigned int ncred, void *cbdata) { - PyObject *list; + PyObject *list = NULL; PyObject *pycred; PyObject *pyauth = (PyObject *)cbdata; PyObject *pycbdata; PyObject *pycb; - PyObject *pyret; + PyObject *pyret = NULL; int ret = -1; size_t i; @@ -1952,11 +1960,17 @@ virConnectCredCallbackWrapper(virConnectCredentialPtr cred, pycb = PyList_GetItem(pyauth, 1); pycbdata = PyList_GetItem(pyauth, 2); - list = PyTuple_New(2); - pycred = PyTuple_New(ncred); + if((list = PyTuple_New(2)) == NULL) + goto cleanup; + + if ((pycred = PyTuple_New(ncred)) == NULL) + goto cleanup; + for (i = 0; i < ncred; i++) { - PyObject *pycreditem; - pycreditem = PyList_New(5); + PyObject *pycreditem = PyList_New(5); + if (pycreditem == NULL) + goto cleanup; + PyTuple_SetItem(pycred, i, pycreditem); PyList_SetItem(pycreditem, 0, libvirt_intWrap((long) cred[i].type)); PyList_SetItem(pycreditem, 1, libvirt_constcharPtrWrap(cred[i].prompt)); @@ -2329,16 +2343,21 @@ libvirt_virConnectListDefinedDomains(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE; } } - py_retval = PyList_New(c_retval); + + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup; if (names) { for (i = 0; i < c_retval; i++) { PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - VIR_FREE(names[i]); } - VIR_FREE(names); } + cleanup: + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); + VIR_FREE(names); + return py_retval; } @@ -2480,7 +2499,9 @@ libvirt_virDomainSnapshotListChildrenNames(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE; } } - py_retval = PyList_New(c_retval); + + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup; for (i = 0; i < c_retval; i++) { if ((pyobj_snap = libvirt_constcharPtrWrap(names[i])) == NULL || @@ -2589,7 +2610,10 @@ libvirt_virDomainGetInfo(PyObject *self ATTRIBUTE_UNUSED, LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) return VIR_PY_NONE; - py_retval = PyList_New(5); + + if ((py_retval = PyList_New(5)) == NULL) + return NULL; + PyList_SetItem(py_retval, 0, libvirt_intWrap((int) info.state)); PyList_SetItem(py_retval, 1, libvirt_ulongWrap(info.maxMem)); PyList_SetItem(py_retval, 2, libvirt_ulongWrap(info.memory)); @@ -2623,7 +2647,9 @@ libvirt_virDomainGetState(PyObject *self ATTRIBUTE_UNUSED, if (c_retval < 0) return VIR_PY_NONE; - py_retval = PyList_New(2); + if ((py_retval = PyList_New(2)) == NULL) + return NULL; + PyList_SetItem(py_retval, 0, libvirt_intWrap(state)); PyList_SetItem(py_retval, 1, libvirt_intWrap(reason)); return py_retval; @@ -2650,7 +2676,10 @@ libvirt_virDomainGetControlInfo(PyObject *self ATTRIBUTE_UNUSED, LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) return VIR_PY_NONE; - py_retval = PyList_New(3); + + if ((py_retval = PyList_New(3)) == NULL) + return NULL; + PyList_SetItem(py_retval, 0, libvirt_intWrap(info.state)); PyList_SetItem(py_retval, 1, libvirt_intWrap(info.details)); PyList_SetItem(py_retval, 2, libvirt_ulonglongWrap(info.stateTime)); @@ -2679,7 +2708,10 @@ libvirt_virDomainGetBlockInfo(PyObject *self ATTRIBUTE_UNUSED, LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) return VIR_PY_NONE; - py_retval = PyList_New(3); + + if ((py_retval = PyList_New(3)) == NULL) + return NULL; + PyList_SetItem(py_retval, 0, libvirt_ulonglongWrap(info.capacity)); PyList_SetItem(py_retval, 1, libvirt_ulonglongWrap(info.allocation)); PyList_SetItem(py_retval, 2, libvirt_ulonglongWrap(info.physical)); @@ -2705,7 +2737,10 @@ libvirt_virNodeGetInfo(PyObject *self ATTRIBUTE_UNUSED, LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) return VIR_PY_NONE; - py_retval = PyList_New(8); + + if ((py_retval = PyList_New(8)) == NULL) + return NULL; + PyList_SetItem(py_retval, 0, libvirt_constcharPtrWrap(&info.model[0])); PyList_SetItem(py_retval, 1, libvirt_longWrap((long) info.memory >> 10)); PyList_SetItem(py_retval, 2, libvirt_intWrap((int) info.cpus)); @@ -2737,7 +2772,10 @@ libvirt_virNodeGetSecurityModel(PyObject *self ATTRIBUTE_UNUSED, LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) return VIR_PY_NONE; - py_retval = PyList_New(2); + + if ((py_retval = PyList_New(2)) == NULL) + return NULL; + PyList_SetItem(py_retval, 0, libvirt_constcharPtrWrap(&model.model[0])); PyList_SetItem(py_retval, 1, libvirt_constcharPtrWrap(&model.doi[0])); return py_retval; @@ -2763,7 +2801,10 @@ libvirt_virDomainGetSecurityLabel(PyObject *self ATTRIBUTE_UNUSED, LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) return VIR_PY_NONE; - py_retval = PyList_New(2); + + if ((py_retval = PyList_New(2)) == NULL) + return NULL; + PyList_SetItem(py_retval, 0, libvirt_constcharPtrWrap(&label.label[0])); PyList_SetItem(py_retval, 1, libvirt_boolWrap(label.enforcing)); return py_retval; @@ -2946,16 +2987,19 @@ libvirt_virConnectListNetworks(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE; } } - py_retval = PyList_New(c_retval); + + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup; if (names) { - for (i = 0; i < c_retval; i++) { + for (i = 0; i < c_retval; i++) PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - VIR_FREE(names[i]); - } - VIR_FREE(names); } + cleanup: + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); + VIR_FREE(names); return py_retval; } @@ -2994,16 +3038,19 @@ libvirt_virConnectListDefinedNetworks(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE; } } - py_retval = PyList_New(c_retval); + + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup; if (names) { - for (i = 0; i < c_retval; i++) { + for (i = 0; i < c_retval; i++) PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - VIR_FREE(names[i]); - } - VIR_FREE(names); } + cleanup: + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); + VIR_FREE(names); return py_retval; } @@ -3219,11 +3266,16 @@ libvirt_virNodeGetCellsFreeMemory(PyObject *self ATTRIBUTE_UNUSED, VIR_FREE(freeMems); return VIR_PY_NONE; } - py_retval = PyList_New(c_retval); + + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup; + for (i = 0; i < c_retval; i++) { PyList_SetItem(py_retval, i, libvirt_ulonglongWrap(freeMems[i])); } + + cleanup: VIR_FREE(freeMems); return py_retval; } @@ -3829,16 +3881,19 @@ libvirt_virNodeListDevices(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE; } } - py_retval = PyList_New(c_retval); + + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup; if (names) { - for (i = 0; i < c_retval; i++) { + for (i = 0; i < c_retval; i++) PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - VIR_FREE(names[i]); - } - VIR_FREE(names); } + cleanup: + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); + VIR_FREE(names); return py_retval; } @@ -3922,16 +3977,19 @@ libvirt_virNodeDeviceListCaps(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE; } } - py_retval = PyList_New(c_retval); + + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup; if (names) { - for (i = 0; i < c_retval; i++) { + for (i = 0; i < c_retval; i++) PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - VIR_FREE(names[i]); - } - VIR_FREE(names); } + cleanup: + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); + VIR_FREE(names); return py_retval; } @@ -4049,16 +4107,19 @@ libvirt_virConnectListSecrets(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE; } } - py_retval = PyList_New(c_retval); + + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup; if (uuids) { - for (i = 0; i < c_retval; i++) { + for (i = 0; i < c_retval; i++) PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(uuids[i])); - VIR_FREE(uuids[i]); - } - VIR_FREE(uuids); } + cleanup: + for (i = 0; i < c_retval; i++) + VIR_FREE(uuids[i]); + VIR_FREE(uuids); return py_retval; } @@ -4282,16 +4343,19 @@ libvirt_virConnectListNWFilters(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE; } } - py_retval = PyList_New(c_retval); + + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup; if (uuids) { - for (i = 0; i < c_retval; i++) { + for (i = 0; i < c_retval; i++) PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(uuids[i])); - VIR_FREE(uuids[i]); - } - VIR_FREE(uuids); } + cleanup: + for (i = 0; i < c_retval; i++) + VIR_FREE(uuids[i]); + VIR_FREE(uuids); return py_retval; } @@ -4578,7 +4642,10 @@ libvirt_virDomainGetJobInfo(PyObject *self ATTRIBUTE_UNUSED, LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) return VIR_PY_NONE; - py_retval = PyList_New(12); + + if ((py_retval = PyList_New(12)) == NULL) + return NULL; + PyList_SetItem(py_retval, 0, libvirt_intWrap((int) info.type)); PyList_SetItem(py_retval, 1, libvirt_ulonglongWrap(info.timeElapsed)); PyList_SetItem(py_retval, 2, libvirt_ulonglongWrap(info.timeRemaining)); @@ -5207,8 +5274,8 @@ libvirt_virEventAddHandleFunc(int fd, PyObject *cb_obj; PyObject *ff_obj; PyObject *opaque_obj; - PyObject *cb_args; - PyObject *pyobj_args; + PyObject *cb_args = NULL; + PyObject *pyobj_args = NULL; int retval = -1; LIBVIRT_ENSURE_THREAD_STATE; @@ -5225,12 +5292,16 @@ libvirt_virEventAddHandleFunc(int fd, ff_obj = libvirt_virFreeCallbackWrap(ff); opaque_obj = libvirt_virVoidPtrWrap(opaque); - cb_args = PyTuple_New(3); + if ((cb_args = PyTuple_New(3)) == NULL) + goto cleanup; + PyTuple_SetItem(cb_args, 0, cb_obj); PyTuple_SetItem(cb_args, 1, opaque_obj); PyTuple_SetItem(cb_args, 2, ff_obj); - pyobj_args = PyTuple_New(4); + if ((pyobj_args = PyTuple_New(4)) == NULL) + goto cleanup; + PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(fd)); PyTuple_SetItem(pyobj_args, 1, libvirt_intWrap(event)); PyTuple_SetItem(pyobj_args, 2, python_cb); @@ -5245,9 +5316,10 @@ libvirt_virEventAddHandleFunc(int fd, } Py_XDECREF(result); - Py_DECREF(pyobj_args); cleanup: + Py_XDECREF(pyobj_args); + LIBVIRT_RELEASE_THREAD_STATE; return retval; @@ -5257,12 +5329,14 @@ static void libvirt_virEventUpdateHandleFunc(int watch, int event) { - PyObject *result; + PyObject *result = NULL; PyObject *pyobj_args; LIBVIRT_ENSURE_THREAD_STATE; - pyobj_args = PyTuple_New(2); + if ((pyobj_args = PyTuple_New(2)) == NULL) + goto cleanup; + PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(watch)); PyTuple_SetItem(pyobj_args, 1, libvirt_intWrap(event)); @@ -5272,8 +5346,9 @@ libvirt_virEventUpdateHandleFunc(int watch, PyErr_Clear(); } + cleanup: Py_XDECREF(result); - Py_DECREF(pyobj_args); + Py_XDECREF(pyobj_args); LIBVIRT_RELEASE_THREAD_STATE; } @@ -5282,7 +5357,7 @@ libvirt_virEventUpdateHandleFunc(int watch, static int libvirt_virEventRemoveHandleFunc(int watch) { - PyObject *result; + PyObject *result = NULL; PyObject *pyobj_args; PyObject *opaque; PyObject *ff; @@ -5291,7 +5366,9 @@ libvirt_virEventRemoveHandleFunc(int watch) LIBVIRT_ENSURE_THREAD_STATE; - pyobj_args = PyTuple_New(1); + if ((pyobj_args = PyTuple_New(1)) == NULL) + goto cleanup; + PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(watch)); result = PyEval_CallObject(removeHandleObj, pyobj_args); @@ -5311,8 +5388,9 @@ libvirt_virEventRemoveHandleFunc(int watch) retval = 0; } + cleanup: Py_XDECREF(result); - Py_DECREF(pyobj_args); + Py_XDECREF(pyobj_args); LIBVIRT_RELEASE_THREAD_STATE; @@ -5326,15 +5404,13 @@ libvirt_virEventAddTimeoutFunc(int timeout, void *opaque, virFreeCallback ff) { - PyObject *result; - - PyObject *python_cb; - PyObject *cb_obj; PyObject *ff_obj; PyObject *opaque_obj; - PyObject *cb_args; - PyObject *pyobj_args; + PyObject *result = NULL; + PyObject *python_cb = NULL; + PyObject *cb_args = NULL; + PyObject *pyobj_args = NULL; int retval = -1; LIBVIRT_ENSURE_THREAD_STATE; @@ -5351,12 +5427,16 @@ libvirt_virEventAddTimeoutFunc(int timeout, ff_obj = libvirt_virFreeCallbackWrap(ff); opaque_obj = libvirt_virVoidPtrWrap(opaque); - cb_args = PyTuple_New(3); + if ((cb_args = PyTuple_New(3)) == NULL) + goto cleanup; + PyTuple_SetItem(cb_args, 0, cb_obj); PyTuple_SetItem(cb_args, 1, opaque_obj); PyTuple_SetItem(cb_args, 2, ff_obj); pyobj_args = PyTuple_New(3); + if ((pyobj_args = PyTuple_New(3)) == NULL) + goto cleanup; PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(timeout)); PyTuple_SetItem(pyobj_args, 1, python_cb); @@ -5370,10 +5450,10 @@ libvirt_virEventAddTimeoutFunc(int timeout, libvirt_intUnwrap(result, &retval); } + cleanup: Py_XDECREF(result); - Py_DECREF(pyobj_args); + Py_XDECREF(pyobj_args); - cleanup: LIBVIRT_RELEASE_THREAD_STATE; return retval; } @@ -5387,7 +5467,9 @@ libvirt_virEventUpdateTimeoutFunc(int timer, LIBVIRT_ENSURE_THREAD_STATE; - pyobj_args = PyTuple_New(2); + if ((pyobj_args = PyTuple_New(2)) == NULL) + goto cleanup; + PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(timer)); PyTuple_SetItem(pyobj_args, 1, libvirt_intWrap(timeout)); @@ -5397,8 +5479,9 @@ libvirt_virEventUpdateTimeoutFunc(int timer, PyErr_Clear(); } + cleanup: Py_XDECREF(result); - Py_DECREF(pyobj_args); + Py_XDECREF(pyobj_args); LIBVIRT_RELEASE_THREAD_STATE; } @@ -5415,7 +5498,9 @@ libvirt_virEventRemoveTimeoutFunc(int timer) LIBVIRT_ENSURE_THREAD_STATE; - pyobj_args = PyTuple_New(1); + if ((pyobj_args = PyTuple_New(1)) == NULL) + goto cleanup; + PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(timer)); result = PyEval_CallObject(removeTimeoutObj, pyobj_args); @@ -5435,8 +5520,9 @@ libvirt_virEventRemoveTimeoutFunc(int timer) retval = 0; } + cleanup: Py_XDECREF(result); - Py_DECREF(pyobj_args); + Py_XDECREF(pyobj_args); LIBVIRT_RELEASE_THREAD_STATE; @@ -6026,13 +6112,13 @@ libvirt_virConnectDomainEventGraphicsCallback(virConnectPtr conn ATTRIBUTE_UNUSE void *opaque) { PyObject *pyobj_cbData = (PyObject*)opaque; - PyObject *pyobj_dom; + PyObject *pyobj_dom = NULL; PyObject *pyobj_ret = NULL; PyObject *pyobj_conn; PyObject *dictKey; - PyObject *pyobj_local; - PyObject *pyobj_remote; - PyObject *pyobj_subject; + PyObject *pyobj_local = NULL; + PyObject *pyobj_remote = NULL; + PyObject *pyobj_subject = NULL; int ret = -1; size_t i; @@ -6051,8 +6137,9 @@ libvirt_virConnectDomainEventGraphicsCallback(virConnectPtr conn ATTRIBUTE_UNUSE } Py_INCREF(pyobj_cbData); - /* FIXME This code should check for errors... */ - pyobj_local = PyDict_New(); + if ((pyobj_local = PyDict_New()) == NULL) + goto cleanup; + PyDict_SetItem(pyobj_local, libvirt_constcharPtrWrap("family"), libvirt_intWrap(local->family)); @@ -6063,7 +6150,9 @@ libvirt_virConnectDomainEventGraphicsCallback(virConnectPtr conn ATTRIBUTE_UNUSE libvirt_constcharPtrWrap("service"), libvirt_constcharPtrWrap(local->service)); - pyobj_remote = PyDict_New(); + if ((pyobj_remote = PyDict_New()) == NULL) + goto cleanup; + PyDict_SetItem(pyobj_remote, libvirt_constcharPtrWrap("family"), libvirt_intWrap(remote->family)); @@ -6074,9 +6163,14 @@ libvirt_virConnectDomainEventGraphicsCallback(virConnectPtr conn ATTRIBUTE_UNUSE libvirt_constcharPtrWrap("service"), libvirt_constcharPtrWrap(remote->service)); - pyobj_subject = PyList_New(subject->nidentity); + if ((pyobj_subject = PyList_New(subject->nidentity)) == NULL) + goto cleanup; + for (i = 0; i < subject->nidentity; i++) { PyObject *pair = PyTuple_New(2); + if (pair == NULL) + goto cleanup; + PyTuple_SetItem(pair, 0, libvirt_constcharPtrWrap(subject->identities[i].type)); PyTuple_SetItem(pair, 1, @@ -6094,11 +6188,14 @@ libvirt_virConnectDomainEventGraphicsCallback(virConnectPtr conn ATTRIBUTE_UNUSE authScheme, pyobj_subject, pyobj_cbData); + cleanup: Py_DECREF(pyobj_cbData); - Py_DECREF(pyobj_dom); + Py_XDECREF(pyobj_dom); - cleanup: if (!pyobj_ret) { + Py_XDECREF(pyobj_local); + Py_XDECREF(pyobj_remote); + Py_XDECREF(pyobj_subject); DEBUG("%s - ret:%p\n", __FUNCTION__, pyobj_ret); PyErr_Print(); } else { -- 2.5.3

$subj: Must check return value for all Py*_New functions On 09/24/2015 10:01 AM, Pavel Hrdina wrote:
If the function fails, we need to cleanup memory and return NULL.
Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-lxc-override.c | 10 +- libvirt-override.c | 269 +++++++++++++++++++++++++++++++++---------------- 2 files changed, 190 insertions(+), 89 deletions(-)
General comment... 4 patches ago we were returning PyErr_NoMemory on allocation failures - that would seem to be the case for these too, right? Or is this "just different" enough that it would be necessary?
diff --git a/libvirt-lxc-override.c b/libvirt-lxc-override.c index 20d1cf4..b0550c7 100644 --- a/libvirt-lxc-override.c +++ b/libvirt-lxc-override.c @@ -79,7 +79,9 @@ libvirt_lxc_virDomainLxcOpenNamespace(PyObject *self ATTRIBUTE_UNUSED, if (c_retval < 0) return VIR_PY_NONE;
- py_retval = PyList_New(0); + if ((py_retval = PyList_New(0)) == NULL) + goto error; + for (i = 0; i < c_retval; i++) { PyObject *item = NULL;
@@ -91,6 +93,8 @@ libvirt_lxc_virDomainLxcOpenNamespace(PyObject *self ATTRIBUTE_UNUSED, goto error; } } + + cleanup: VIR_FREE(fdlist); return py_retval;
@@ -98,8 +102,8 @@ libvirt_lxc_virDomainLxcOpenNamespace(PyObject *self ATTRIBUTE_UNUSED, for (i = 0; i < c_retval; i++) { VIR_FORCE_CLOSE(fdlist[i]); } - VIR_FREE(fdlist); - return NULL; + Py_CLEAR(py_retval); + goto cleanup; } /************************************************************************ * * diff --git a/libvirt-override.c b/libvirt-override.c index 0df6844..92c31b8 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -1859,7 +1859,7 @@ static void libvirt_virErrorFuncHandler(ATTRIBUTE_UNUSED void *ctx, virErrorPtr err) { - PyObject *list, *info; + PyObject *list = NULL, *info = NULL; PyObject *result;
DEBUG("libvirt_virErrorFuncHandler(%p, %s, ...) called\n", ctx, @@ -1874,8 +1874,12 @@ libvirt_virErrorFuncHandler(ATTRIBUTE_UNUSED void *ctx, (libvirt_virPythonErrorFuncHandler == Py_None)) { virDefaultErrorFunc(err); } else { - list = PyTuple_New(2); - info = PyTuple_New(9); + if ((list = PyTuple_New(2)) == NULL) + goto cleanup; + + if ((info = PyTuple_New(9)) == NULL) + goto cleanup; + PyTuple_SetItem(list, 0, libvirt_virPythonErrorFuncCtxt); PyTuple_SetItem(list, 1, info); Py_XINCREF(libvirt_virPythonErrorFuncCtxt); @@ -1894,6 +1898,10 @@ libvirt_virErrorFuncHandler(ATTRIBUTE_UNUSED void *ctx, Py_XDECREF(result); }
+ cleanup: + Py_XDECREF(list); + Py_XDECREF(info); + LIBVIRT_RELEASE_THREAD_STATE; }
@@ -1938,12 +1946,12 @@ virConnectCredCallbackWrapper(virConnectCredentialPtr cred, unsigned int ncred, void *cbdata) { - PyObject *list; + PyObject *list = NULL; PyObject *pycred; PyObject *pyauth = (PyObject *)cbdata; PyObject *pycbdata; PyObject *pycb; - PyObject *pyret; + PyObject *pyret = NULL; int ret = -1; size_t i;
@@ -1952,11 +1960,17 @@ virConnectCredCallbackWrapper(virConnectCredentialPtr cred, pycb = PyList_GetItem(pyauth, 1); pycbdata = PyList_GetItem(pyauth, 2);
- list = PyTuple_New(2); - pycred = PyTuple_New(ncred); + if((list = PyTuple_New(2)) == NULL)
if ((
+ goto cleanup; + + if ((pycred = PyTuple_New(ncred)) == NULL) + goto cleanup; + for (i = 0; i < ncred; i++) { - PyObject *pycreditem; - pycreditem = PyList_New(5); + PyObject *pycreditem = PyList_New(5); + if (pycreditem == NULL) + goto cleanup; +
nit: could all be one line (any typos are mine ;-)) if ((pycreditem = PyList_New(5)) == NULL) Nothing jumped out at me in the rest - although I admit my eyes & brain are starting to tire ;-) John
PyTuple_SetItem(pycred, i, pycreditem); PyList_SetItem(pycreditem, 0, libvirt_intWrap((long) cred[i].type)); PyList_SetItem(pycreditem, 1, libvirt_constcharPtrWrap(cred[i].prompt)); @@ -2329,16 +2343,21 @@ libvirt_virConnectListDefinedDomains(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE; } } - py_retval = PyList_New(c_retval); + + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup;
if (names) { for (i = 0; i < c_retval; i++) { PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - VIR_FREE(names[i]); } - VIR_FREE(names); }
+ cleanup: + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); + VIR_FREE(names); + return py_retval; }
@@ -2480,7 +2499,9 @@ libvirt_virDomainSnapshotListChildrenNames(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE; } } - py_retval = PyList_New(c_retval); + + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup;
for (i = 0; i < c_retval; i++) { if ((pyobj_snap = libvirt_constcharPtrWrap(names[i])) == NULL || @@ -2589,7 +2610,10 @@ libvirt_virDomainGetInfo(PyObject *self ATTRIBUTE_UNUSED, LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) return VIR_PY_NONE; - py_retval = PyList_New(5); + + if ((py_retval = PyList_New(5)) == NULL) + return NULL; + PyList_SetItem(py_retval, 0, libvirt_intWrap((int) info.state)); PyList_SetItem(py_retval, 1, libvirt_ulongWrap(info.maxMem)); PyList_SetItem(py_retval, 2, libvirt_ulongWrap(info.memory)); @@ -2623,7 +2647,9 @@ libvirt_virDomainGetState(PyObject *self ATTRIBUTE_UNUSED, if (c_retval < 0) return VIR_PY_NONE;
- py_retval = PyList_New(2); + if ((py_retval = PyList_New(2)) == NULL) + return NULL; + PyList_SetItem(py_retval, 0, libvirt_intWrap(state)); PyList_SetItem(py_retval, 1, libvirt_intWrap(reason)); return py_retval; @@ -2650,7 +2676,10 @@ libvirt_virDomainGetControlInfo(PyObject *self ATTRIBUTE_UNUSED, LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) return VIR_PY_NONE; - py_retval = PyList_New(3); + + if ((py_retval = PyList_New(3)) == NULL) + return NULL; + PyList_SetItem(py_retval, 0, libvirt_intWrap(info.state)); PyList_SetItem(py_retval, 1, libvirt_intWrap(info.details)); PyList_SetItem(py_retval, 2, libvirt_ulonglongWrap(info.stateTime)); @@ -2679,7 +2708,10 @@ libvirt_virDomainGetBlockInfo(PyObject *self ATTRIBUTE_UNUSED, LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) return VIR_PY_NONE; - py_retval = PyList_New(3); + + if ((py_retval = PyList_New(3)) == NULL) + return NULL; + PyList_SetItem(py_retval, 0, libvirt_ulonglongWrap(info.capacity)); PyList_SetItem(py_retval, 1, libvirt_ulonglongWrap(info.allocation)); PyList_SetItem(py_retval, 2, libvirt_ulonglongWrap(info.physical)); @@ -2705,7 +2737,10 @@ libvirt_virNodeGetInfo(PyObject *self ATTRIBUTE_UNUSED, LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) return VIR_PY_NONE; - py_retval = PyList_New(8); + + if ((py_retval = PyList_New(8)) == NULL) + return NULL; + PyList_SetItem(py_retval, 0, libvirt_constcharPtrWrap(&info.model[0])); PyList_SetItem(py_retval, 1, libvirt_longWrap((long) info.memory >> 10)); PyList_SetItem(py_retval, 2, libvirt_intWrap((int) info.cpus)); @@ -2737,7 +2772,10 @@ libvirt_virNodeGetSecurityModel(PyObject *self ATTRIBUTE_UNUSED, LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) return VIR_PY_NONE; - py_retval = PyList_New(2); + + if ((py_retval = PyList_New(2)) == NULL) + return NULL; + PyList_SetItem(py_retval, 0, libvirt_constcharPtrWrap(&model.model[0])); PyList_SetItem(py_retval, 1, libvirt_constcharPtrWrap(&model.doi[0])); return py_retval; @@ -2763,7 +2801,10 @@ libvirt_virDomainGetSecurityLabel(PyObject *self ATTRIBUTE_UNUSED, LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) return VIR_PY_NONE; - py_retval = PyList_New(2); + + if ((py_retval = PyList_New(2)) == NULL) + return NULL; + PyList_SetItem(py_retval, 0, libvirt_constcharPtrWrap(&label.label[0])); PyList_SetItem(py_retval, 1, libvirt_boolWrap(label.enforcing)); return py_retval; @@ -2946,16 +2987,19 @@ libvirt_virConnectListNetworks(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE; } } - py_retval = PyList_New(c_retval); + + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup;
if (names) { - for (i = 0; i < c_retval; i++) { + for (i = 0; i < c_retval; i++) PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - VIR_FREE(names[i]); - } - VIR_FREE(names); }
+ cleanup: + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); + VIR_FREE(names); return py_retval; }
@@ -2994,16 +3038,19 @@ libvirt_virConnectListDefinedNetworks(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE; } } - py_retval = PyList_New(c_retval); + + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup;
if (names) { - for (i = 0; i < c_retval; i++) { + for (i = 0; i < c_retval; i++) PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - VIR_FREE(names[i]); - } - VIR_FREE(names); }
+ cleanup: + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); + VIR_FREE(names); return py_retval; }
@@ -3219,11 +3266,16 @@ libvirt_virNodeGetCellsFreeMemory(PyObject *self ATTRIBUTE_UNUSED, VIR_FREE(freeMems); return VIR_PY_NONE; } - py_retval = PyList_New(c_retval); + + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup; + for (i = 0; i < c_retval; i++) { PyList_SetItem(py_retval, i, libvirt_ulonglongWrap(freeMems[i])); } + + cleanup: VIR_FREE(freeMems); return py_retval; } @@ -3829,16 +3881,19 @@ libvirt_virNodeListDevices(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE; } } - py_retval = PyList_New(c_retval); + + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup;
if (names) { - for (i = 0; i < c_retval; i++) { + for (i = 0; i < c_retval; i++) PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - VIR_FREE(names[i]); - } - VIR_FREE(names); }
+ cleanup: + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); + VIR_FREE(names); return py_retval; }
@@ -3922,16 +3977,19 @@ libvirt_virNodeDeviceListCaps(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE; } } - py_retval = PyList_New(c_retval); + + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup;
if (names) { - for (i = 0; i < c_retval; i++) { + for (i = 0; i < c_retval; i++) PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - VIR_FREE(names[i]); - } - VIR_FREE(names); }
+ cleanup: + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); + VIR_FREE(names); return py_retval; }
@@ -4049,16 +4107,19 @@ libvirt_virConnectListSecrets(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE; } } - py_retval = PyList_New(c_retval); + + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup;
if (uuids) { - for (i = 0; i < c_retval; i++) { + for (i = 0; i < c_retval; i++) PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(uuids[i])); - VIR_FREE(uuids[i]); - } - VIR_FREE(uuids); }
+ cleanup: + for (i = 0; i < c_retval; i++) + VIR_FREE(uuids[i]); + VIR_FREE(uuids); return py_retval; }
@@ -4282,16 +4343,19 @@ libvirt_virConnectListNWFilters(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE; } } - py_retval = PyList_New(c_retval); + + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup;
if (uuids) { - for (i = 0; i < c_retval; i++) { + for (i = 0; i < c_retval; i++) PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(uuids[i])); - VIR_FREE(uuids[i]); - } - VIR_FREE(uuids); }
+ cleanup: + for (i = 0; i < c_retval; i++) + VIR_FREE(uuids[i]); + VIR_FREE(uuids); return py_retval; }
@@ -4578,7 +4642,10 @@ libvirt_virDomainGetJobInfo(PyObject *self ATTRIBUTE_UNUSED, LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) return VIR_PY_NONE; - py_retval = PyList_New(12); + + if ((py_retval = PyList_New(12)) == NULL) + return NULL; + PyList_SetItem(py_retval, 0, libvirt_intWrap((int) info.type)); PyList_SetItem(py_retval, 1, libvirt_ulonglongWrap(info.timeElapsed)); PyList_SetItem(py_retval, 2, libvirt_ulonglongWrap(info.timeRemaining)); @@ -5207,8 +5274,8 @@ libvirt_virEventAddHandleFunc(int fd, PyObject *cb_obj; PyObject *ff_obj; PyObject *opaque_obj; - PyObject *cb_args; - PyObject *pyobj_args; + PyObject *cb_args = NULL; + PyObject *pyobj_args = NULL; int retval = -1;
LIBVIRT_ENSURE_THREAD_STATE; @@ -5225,12 +5292,16 @@ libvirt_virEventAddHandleFunc(int fd, ff_obj = libvirt_virFreeCallbackWrap(ff); opaque_obj = libvirt_virVoidPtrWrap(opaque);
- cb_args = PyTuple_New(3); + if ((cb_args = PyTuple_New(3)) == NULL) + goto cleanup; + PyTuple_SetItem(cb_args, 0, cb_obj); PyTuple_SetItem(cb_args, 1, opaque_obj); PyTuple_SetItem(cb_args, 2, ff_obj);
- pyobj_args = PyTuple_New(4); + if ((pyobj_args = PyTuple_New(4)) == NULL) + goto cleanup; + PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(fd)); PyTuple_SetItem(pyobj_args, 1, libvirt_intWrap(event)); PyTuple_SetItem(pyobj_args, 2, python_cb); @@ -5245,9 +5316,10 @@ libvirt_virEventAddHandleFunc(int fd, }
Py_XDECREF(result); - Py_DECREF(pyobj_args);
cleanup: + Py_XDECREF(pyobj_args); + LIBVIRT_RELEASE_THREAD_STATE;
return retval; @@ -5257,12 +5329,14 @@ static void libvirt_virEventUpdateHandleFunc(int watch, int event) { - PyObject *result; + PyObject *result = NULL; PyObject *pyobj_args;
LIBVIRT_ENSURE_THREAD_STATE;
- pyobj_args = PyTuple_New(2); + if ((pyobj_args = PyTuple_New(2)) == NULL) + goto cleanup; + PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(watch)); PyTuple_SetItem(pyobj_args, 1, libvirt_intWrap(event));
@@ -5272,8 +5346,9 @@ libvirt_virEventUpdateHandleFunc(int watch, PyErr_Clear(); }
+ cleanup: Py_XDECREF(result); - Py_DECREF(pyobj_args); + Py_XDECREF(pyobj_args);
LIBVIRT_RELEASE_THREAD_STATE; } @@ -5282,7 +5357,7 @@ libvirt_virEventUpdateHandleFunc(int watch, static int libvirt_virEventRemoveHandleFunc(int watch) { - PyObject *result; + PyObject *result = NULL; PyObject *pyobj_args; PyObject *opaque; PyObject *ff; @@ -5291,7 +5366,9 @@ libvirt_virEventRemoveHandleFunc(int watch)
LIBVIRT_ENSURE_THREAD_STATE;
- pyobj_args = PyTuple_New(1); + if ((pyobj_args = PyTuple_New(1)) == NULL) + goto cleanup; + PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(watch));
result = PyEval_CallObject(removeHandleObj, pyobj_args); @@ -5311,8 +5388,9 @@ libvirt_virEventRemoveHandleFunc(int watch) retval = 0; }
+ cleanup: Py_XDECREF(result); - Py_DECREF(pyobj_args); + Py_XDECREF(pyobj_args);
LIBVIRT_RELEASE_THREAD_STATE;
@@ -5326,15 +5404,13 @@ libvirt_virEventAddTimeoutFunc(int timeout, void *opaque, virFreeCallback ff) { - PyObject *result; - - PyObject *python_cb; - PyObject *cb_obj; PyObject *ff_obj; PyObject *opaque_obj; - PyObject *cb_args; - PyObject *pyobj_args; + PyObject *result = NULL; + PyObject *python_cb = NULL; + PyObject *cb_args = NULL; + PyObject *pyobj_args = NULL; int retval = -1;
LIBVIRT_ENSURE_THREAD_STATE; @@ -5351,12 +5427,16 @@ libvirt_virEventAddTimeoutFunc(int timeout, ff_obj = libvirt_virFreeCallbackWrap(ff); opaque_obj = libvirt_virVoidPtrWrap(opaque);
- cb_args = PyTuple_New(3); + if ((cb_args = PyTuple_New(3)) == NULL) + goto cleanup; + PyTuple_SetItem(cb_args, 0, cb_obj); PyTuple_SetItem(cb_args, 1, opaque_obj); PyTuple_SetItem(cb_args, 2, ff_obj);
pyobj_args = PyTuple_New(3); + if ((pyobj_args = PyTuple_New(3)) == NULL) + goto cleanup;
PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(timeout)); PyTuple_SetItem(pyobj_args, 1, python_cb); @@ -5370,10 +5450,10 @@ libvirt_virEventAddTimeoutFunc(int timeout, libvirt_intUnwrap(result, &retval); }
+ cleanup: Py_XDECREF(result); - Py_DECREF(pyobj_args); + Py_XDECREF(pyobj_args);
- cleanup: LIBVIRT_RELEASE_THREAD_STATE; return retval; } @@ -5387,7 +5467,9 @@ libvirt_virEventUpdateTimeoutFunc(int timer,
LIBVIRT_ENSURE_THREAD_STATE;
- pyobj_args = PyTuple_New(2); + if ((pyobj_args = PyTuple_New(2)) == NULL) + goto cleanup; + PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(timer)); PyTuple_SetItem(pyobj_args, 1, libvirt_intWrap(timeout));
@@ -5397,8 +5479,9 @@ libvirt_virEventUpdateTimeoutFunc(int timer, PyErr_Clear(); }
+ cleanup: Py_XDECREF(result); - Py_DECREF(pyobj_args); + Py_XDECREF(pyobj_args);
LIBVIRT_RELEASE_THREAD_STATE; } @@ -5415,7 +5498,9 @@ libvirt_virEventRemoveTimeoutFunc(int timer)
LIBVIRT_ENSURE_THREAD_STATE;
- pyobj_args = PyTuple_New(1); + if ((pyobj_args = PyTuple_New(1)) == NULL) + goto cleanup; + PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(timer));
result = PyEval_CallObject(removeTimeoutObj, pyobj_args); @@ -5435,8 +5520,9 @@ libvirt_virEventRemoveTimeoutFunc(int timer) retval = 0; }
+ cleanup: Py_XDECREF(result); - Py_DECREF(pyobj_args); + Py_XDECREF(pyobj_args);
LIBVIRT_RELEASE_THREAD_STATE;
@@ -6026,13 +6112,13 @@ libvirt_virConnectDomainEventGraphicsCallback(virConnectPtr conn ATTRIBUTE_UNUSE void *opaque) { PyObject *pyobj_cbData = (PyObject*)opaque; - PyObject *pyobj_dom; + PyObject *pyobj_dom = NULL; PyObject *pyobj_ret = NULL; PyObject *pyobj_conn; PyObject *dictKey; - PyObject *pyobj_local; - PyObject *pyobj_remote; - PyObject *pyobj_subject; + PyObject *pyobj_local = NULL; + PyObject *pyobj_remote = NULL; + PyObject *pyobj_subject = NULL; int ret = -1; size_t i;
@@ -6051,8 +6137,9 @@ libvirt_virConnectDomainEventGraphicsCallback(virConnectPtr conn ATTRIBUTE_UNUSE } Py_INCREF(pyobj_cbData);
- /* FIXME This code should check for errors... */ - pyobj_local = PyDict_New(); + if ((pyobj_local = PyDict_New()) == NULL) + goto cleanup; + PyDict_SetItem(pyobj_local, libvirt_constcharPtrWrap("family"), libvirt_intWrap(local->family)); @@ -6063,7 +6150,9 @@ libvirt_virConnectDomainEventGraphicsCallback(virConnectPtr conn ATTRIBUTE_UNUSE libvirt_constcharPtrWrap("service"), libvirt_constcharPtrWrap(local->service));
- pyobj_remote = PyDict_New(); + if ((pyobj_remote = PyDict_New()) == NULL) + goto cleanup; + PyDict_SetItem(pyobj_remote, libvirt_constcharPtrWrap("family"), libvirt_intWrap(remote->family)); @@ -6074,9 +6163,14 @@ libvirt_virConnectDomainEventGraphicsCallback(virConnectPtr conn ATTRIBUTE_UNUSE libvirt_constcharPtrWrap("service"), libvirt_constcharPtrWrap(remote->service));
- pyobj_subject = PyList_New(subject->nidentity); + if ((pyobj_subject = PyList_New(subject->nidentity)) == NULL) + goto cleanup; + for (i = 0; i < subject->nidentity; i++) { PyObject *pair = PyTuple_New(2); + if (pair == NULL) + goto cleanup; + PyTuple_SetItem(pair, 0, libvirt_constcharPtrWrap(subject->identities[i].type)); PyTuple_SetItem(pair, 1, @@ -6094,11 +6188,14 @@ libvirt_virConnectDomainEventGraphicsCallback(virConnectPtr conn ATTRIBUTE_UNUSE authScheme, pyobj_subject, pyobj_cbData);
+ cleanup: Py_DECREF(pyobj_cbData); - Py_DECREF(pyobj_dom); + Py_XDECREF(pyobj_dom);
- cleanup: if (!pyobj_ret) { + Py_XDECREF(pyobj_local); + Py_XDECREF(pyobj_remote); + Py_XDECREF(pyobj_subject); DEBUG("%s - ret:%p\n", __FUNCTION__, pyobj_ret); PyErr_Print(); } else {

On Sat, Sep 26, 2015 at 09:37:23AM -0400, John Ferlan wrote:
$subj:
Must check return value for all Py*_New functions
Thanks, I'll update it.
On 09/24/2015 10:01 AM, Pavel Hrdina wrote:
If the function fails, we need to cleanup memory and return NULL.
Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-lxc-override.c | 10 +- libvirt-override.c | 269 +++++++++++++++++++++++++++++++++---------------- 2 files changed, 190 insertions(+), 89 deletions(-)
General comment... 4 patches ago we were returning PyErr_NoMemory on allocation failures - that would seem to be the case for these too, right? Or is this "just different" enough that it would be necessary?
No, because all python APIs sets an exception in case of error.
diff --git a/libvirt-lxc-override.c b/libvirt-lxc-override.c index 20d1cf4..b0550c7 100644 --- a/libvirt-lxc-override.c +++ b/libvirt-lxc-override.c @@ -79,7 +79,9 @@ libvirt_lxc_virDomainLxcOpenNamespace(PyObject *self ATTRIBUTE_UNUSED, if (c_retval < 0) return VIR_PY_NONE;
- py_retval = PyList_New(0); + if ((py_retval = PyList_New(0)) == NULL) + goto error; + for (i = 0; i < c_retval; i++) { PyObject *item = NULL;
@@ -91,6 +93,8 @@ libvirt_lxc_virDomainLxcOpenNamespace(PyObject *self ATTRIBUTE_UNUSED, goto error; } } + + cleanup: VIR_FREE(fdlist); return py_retval;
@@ -98,8 +102,8 @@ libvirt_lxc_virDomainLxcOpenNamespace(PyObject *self ATTRIBUTE_UNUSED, for (i = 0; i < c_retval; i++) { VIR_FORCE_CLOSE(fdlist[i]); } - VIR_FREE(fdlist); - return NULL; + Py_CLEAR(py_retval); + goto cleanup; } /************************************************************************ * * diff --git a/libvirt-override.c b/libvirt-override.c index 0df6844..92c31b8 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -1859,7 +1859,7 @@ static void libvirt_virErrorFuncHandler(ATTRIBUTE_UNUSED void *ctx, virErrorPtr err) { - PyObject *list, *info; + PyObject *list = NULL, *info = NULL; PyObject *result;
DEBUG("libvirt_virErrorFuncHandler(%p, %s, ...) called\n", ctx, @@ -1874,8 +1874,12 @@ libvirt_virErrorFuncHandler(ATTRIBUTE_UNUSED void *ctx, (libvirt_virPythonErrorFuncHandler == Py_None)) { virDefaultErrorFunc(err); } else { - list = PyTuple_New(2); - info = PyTuple_New(9); + if ((list = PyTuple_New(2)) == NULL) + goto cleanup; + + if ((info = PyTuple_New(9)) == NULL) + goto cleanup; + PyTuple_SetItem(list, 0, libvirt_virPythonErrorFuncCtxt); PyTuple_SetItem(list, 1, info); Py_XINCREF(libvirt_virPythonErrorFuncCtxt); @@ -1894,6 +1898,10 @@ libvirt_virErrorFuncHandler(ATTRIBUTE_UNUSED void *ctx, Py_XDECREF(result); }
+ cleanup: + Py_XDECREF(list); + Py_XDECREF(info); + LIBVIRT_RELEASE_THREAD_STATE; }
@@ -1938,12 +1946,12 @@ virConnectCredCallbackWrapper(virConnectCredentialPtr cred, unsigned int ncred, void *cbdata) { - PyObject *list; + PyObject *list = NULL; PyObject *pycred; PyObject *pyauth = (PyObject *)cbdata; PyObject *pycbdata; PyObject *pycb; - PyObject *pyret; + PyObject *pyret = NULL; int ret = -1; size_t i;
@@ -1952,11 +1960,17 @@ virConnectCredCallbackWrapper(virConnectCredentialPtr cred, pycb = PyList_GetItem(pyauth, 1); pycbdata = PyList_GetItem(pyauth, 2);
- list = PyTuple_New(2); - pycred = PyTuple_New(ncred); + if((list = PyTuple_New(2)) == NULL)
if ((
Nice catch, thanks.
+ goto cleanup; + + if ((pycred = PyTuple_New(ncred)) == NULL) + goto cleanup; + for (i = 0; i < ncred; i++) { - PyObject *pycreditem; - pycreditem = PyList_New(5); + PyObject *pycreditem = PyList_New(5); + if (pycreditem == NULL) + goto cleanup; +
nit: could all be one line (any typos are mine ;-))
if ((pycreditem = PyList_New(5)) == NULL)
Nothing jumped out at me in the rest - although I admit my eyes & brain are starting to tire ;-)
It's a lot of almost same changes, easy to miss something. I'll update that, thanks. Pavel
John
PyTuple_SetItem(pycred, i, pycreditem); PyList_SetItem(pycreditem, 0, libvirt_intWrap((long) cred[i].type)); PyList_SetItem(pycreditem, 1, libvirt_constcharPtrWrap(cred[i].prompt));
[...]

This change makes it easier to free allocated object especially for python objects. We can benefit from the fact, that if you call Py_DECREF on eny python object it will also remove reference for all assigned object to the root object. For example, calling Py_DECREF on dict will also remove reference recursively on all elements in that dictionary. Our job is then just call Py_DECREF on the root element and don't care about anything else. Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 189 ++++++++++++++++++++++++----------------------------- 1 file changed, 85 insertions(+), 104 deletions(-) diff --git a/libvirt-override.c b/libvirt-override.c index 92c31b8..63a469b 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -1238,9 +1238,16 @@ libvirt_virDomainGetVcpus(PyObject *self ATTRIBUTE_UNUSED, goto cleanup; if ((pycpuinfo = PyList_New(dominfo.nrVirtCpu)) == NULL) goto cleanup; + + if (PyTuple_SetItem(pyretval, 0, pycpuinfo) < 0) + goto cleanup; + if ((pycpumap = PyList_New(dominfo.nrVirtCpu)) == NULL) goto cleanup; + if (PyTuple_SetItem(pyretval, 1, pycpumap) < 0) + goto cleanup; + for (i = 0; i < dominfo.nrVirtCpu; i++) { PyObject *info = PyTuple_New(4); PyObject *item = NULL; @@ -1248,54 +1255,42 @@ libvirt_virDomainGetVcpus(PyObject *self ATTRIBUTE_UNUSED, if (info == NULL) goto cleanup; + if (PyList_SetItem(pycpuinfo, i, info) < 0) + goto cleanup; + if ((item = libvirt_intWrap((long)cpuinfo[i].number)) == NULL || PyTuple_SetItem(info, 0, item) < 0) - goto itemError; + goto cleanup; if ((item = libvirt_intWrap((long)cpuinfo[i].state)) == NULL || PyTuple_SetItem(info, 1, item) < 0) - goto itemError; + goto cleanup; if ((item = libvirt_ulonglongWrap(cpuinfo[i].cpuTime)) == NULL || PyTuple_SetItem(info, 2, item) < 0) - goto itemError; + goto cleanup; if ((item = libvirt_intWrap((long)cpuinfo[i].cpu)) == NULL || PyTuple_SetItem(info, 3, item) < 0) - goto itemError; - - if (PyList_SetItem(pycpuinfo, i, info) < 0) - goto itemError; - - continue; - itemError: - Py_DECREF(info); - Py_XDECREF(item); - goto cleanup; + goto cleanup; } for (i = 0; i < dominfo.nrVirtCpu; i++) { PyObject *info = PyTuple_New(cpunum); size_t j; if (info == NULL) goto cleanup; + + if (PyList_SetItem(pycpumap, i, info) < 0) + goto cleanup; + for (j = 0; j < cpunum; j++) { PyObject *item = NULL; if ((item = PyBool_FromLong(VIR_CPU_USABLE(cpumap, cpumaplen, i, j))) == NULL || - PyTuple_SetItem(info, j, item) < 0) { - Py_DECREF(info); - Py_XDECREF(item); + PyTuple_SetItem(info, j, item) < 0) goto cleanup; - } - } - if (PyList_SetItem(pycpumap, i, info) < 0) { - Py_DECREF(info); - goto cleanup; } } - if (PyTuple_SetItem(pyretval, 0, pycpuinfo) < 0 || - PyTuple_SetItem(pyretval, 1, pycpumap) < 0) - goto cleanup; VIR_FREE(cpuinfo); VIR_FREE(cpumap); @@ -1306,8 +1301,6 @@ libvirt_virDomainGetVcpus(PyObject *self ATTRIBUTE_UNUSED, VIR_FREE(cpuinfo); VIR_FREE(cpumap); Py_XDECREF(pyretval); - Py_XDECREF(pycpuinfo); - Py_XDECREF(pycpumap); return error; } @@ -1489,12 +1482,13 @@ libvirt_virDomainGetVcpuPinInfo(PyObject *self ATTRIBUTE_UNUSED, if (mapinfo == NULL) goto cleanup; + PyList_SetItem(pycpumaps, vcpu, mapinfo); + for (pcpu = 0; pcpu < cpunum; pcpu++) { PyTuple_SetItem(mapinfo, pcpu, PyBool_FromLong(VIR_CPU_USABLE(cpumaps, cpumaplen, vcpu, pcpu))); } - PyList_SetItem(pycpumaps, vcpu, mapinfo); } VIR_FREE(cpumaps); @@ -1877,12 +1871,14 @@ libvirt_virErrorFuncHandler(ATTRIBUTE_UNUSED void *ctx, if ((list = PyTuple_New(2)) == NULL) goto cleanup; + Py_XINCREF(libvirt_virPythonErrorFuncCtxt); + PyTuple_SetItem(list, 0, libvirt_virPythonErrorFuncCtxt); + if ((info = PyTuple_New(9)) == NULL) goto cleanup; - PyTuple_SetItem(list, 0, libvirt_virPythonErrorFuncCtxt); PyTuple_SetItem(list, 1, info); - Py_XINCREF(libvirt_virPythonErrorFuncCtxt); + PyTuple_SetItem(info, 0, libvirt_intWrap((long) err->code)); PyTuple_SetItem(info, 1, libvirt_intWrap((long) err->domain)); PyTuple_SetItem(info, 2, libvirt_constcharPtrWrap(err->message)); @@ -1894,14 +1890,11 @@ libvirt_virErrorFuncHandler(ATTRIBUTE_UNUSED void *ctx, PyTuple_SetItem(info, 8, libvirt_intWrap((long) err->int2)); /* TODO pass conn and dom if available */ result = PyEval_CallObject(libvirt_virPythonErrorFuncHandler, list); - Py_XDECREF(list); Py_XDECREF(result); } cleanup: Py_XDECREF(list); - Py_XDECREF(info); - LIBVIRT_RELEASE_THREAD_STATE; } @@ -1966,6 +1959,8 @@ virConnectCredCallbackWrapper(virConnectCredentialPtr cred, if ((pycred = PyTuple_New(ncred)) == NULL) goto cleanup; + PyTuple_SetItem(list, 0, pycred); + for (i = 0; i < ncred; i++) { PyObject *pycreditem = PyList_New(5); if (pycreditem == NULL) @@ -1989,7 +1984,6 @@ virConnectCredCallbackWrapper(virConnectCredentialPtr cred, PyList_SetItem(pycreditem, 4, VIR_PY_NONE); } - PyTuple_SetItem(list, 0, pycred); Py_XINCREF(pycbdata); PyTuple_SetItem(list, 1, pycbdata); @@ -4720,19 +4714,18 @@ libvirt_virDomainGetBlockJobInfo(PyObject *self ATTRIBUTE_UNUSED, return NULL; domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain); - if ((dict = PyDict_New()) == NULL) - return NULL; - LIBVIRT_BEGIN_ALLOW_THREADS; c_ret = virDomainGetBlockJobInfo(domain, path, &info, flags); LIBVIRT_END_ALLOW_THREADS; - if (c_ret == 0) { - return dict; - } else if (c_ret < 0) { - Py_DECREF(dict); + if (c_ret < 0) return VIR_PY_NONE; - } + + if ((dict = PyDict_New()) == NULL) + return NULL; + + if (c_ret == 0) + return dict; if ((type = libvirt_intWrap(info.type)) == NULL || PyDict_SetItemString(dict, "type", type) < 0) @@ -5270,16 +5263,22 @@ libvirt_virEventAddHandleFunc(int fd, virFreeCallback ff) { PyObject *result; - PyObject *python_cb; PyObject *cb_obj; PyObject *ff_obj; PyObject *opaque_obj; + PyObject *python_cb = NULL; PyObject *cb_args = NULL; PyObject *pyobj_args = NULL; int retval = -1; LIBVIRT_ENSURE_THREAD_STATE; + if ((pyobj_args = PyTuple_New(4)) == NULL) + goto cleanup; + + PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(fd)); + PyTuple_SetItem(pyobj_args, 1, libvirt_intWrap(event)); + /* Lookup the python callback */ python_cb = libvirt_lookupPythonFunc("_eventInvokeHandleCallback"); if (!python_cb) { @@ -5287,26 +5286,21 @@ libvirt_virEventAddHandleFunc(int fd, } Py_INCREF(python_cb); - /* create tuple for cb */ - cb_obj = libvirt_virEventHandleCallbackWrap(cb); - ff_obj = libvirt_virFreeCallbackWrap(ff); - opaque_obj = libvirt_virVoidPtrWrap(opaque); + PyTuple_SetItem(pyobj_args, 2, python_cb); if ((cb_args = PyTuple_New(3)) == NULL) goto cleanup; + PyTuple_SetItem(pyobj_args, 3, cb_args); + + /* create tuple for cb */ + cb_obj = libvirt_virEventHandleCallbackWrap(cb); + ff_obj = libvirt_virFreeCallbackWrap(ff); + opaque_obj = libvirt_virVoidPtrWrap(opaque); PyTuple_SetItem(cb_args, 0, cb_obj); PyTuple_SetItem(cb_args, 1, opaque_obj); PyTuple_SetItem(cb_args, 2, ff_obj); - if ((pyobj_args = PyTuple_New(4)) == NULL) - goto cleanup; - - PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(fd)); - PyTuple_SetItem(pyobj_args, 1, libvirt_intWrap(event)); - PyTuple_SetItem(pyobj_args, 2, python_cb); - PyTuple_SetItem(pyobj_args, 3, cb_args); - result = PyEval_CallObject(addHandleObj, pyobj_args); if (!result) { PyErr_Print(); @@ -5415,33 +5409,32 @@ libvirt_virEventAddTimeoutFunc(int timeout, LIBVIRT_ENSURE_THREAD_STATE; + if ((pyobj_args = PyTuple_New(3)) == NULL) + goto cleanup; + + PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(timeout)); + /* Lookup the python callback */ python_cb = libvirt_lookupPythonFunc("_eventInvokeTimeoutCallback"); if (!python_cb) { goto cleanup; } Py_INCREF(python_cb); + PyTuple_SetItem(pyobj_args, 1, python_cb); + + if ((cb_args = PyTuple_New(3)) == NULL) + goto cleanup; + + PyTuple_SetItem(pyobj_args, 2, cb_args); /* create tuple for cb */ cb_obj = libvirt_virEventTimeoutCallbackWrap(cb); ff_obj = libvirt_virFreeCallbackWrap(ff); opaque_obj = libvirt_virVoidPtrWrap(opaque); - - if ((cb_args = PyTuple_New(3)) == NULL) - goto cleanup; - PyTuple_SetItem(cb_args, 0, cb_obj); PyTuple_SetItem(cb_args, 1, opaque_obj); PyTuple_SetItem(cb_args, 2, ff_obj); - pyobj_args = PyTuple_New(3); - if ((pyobj_args = PyTuple_New(3)) == NULL) - goto cleanup; - - PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(timeout)); - PyTuple_SetItem(pyobj_args, 1, python_cb); - PyTuple_SetItem(pyobj_args, 2, cb_args); - result = PyEval_CallObject(addTimeoutObj, pyobj_args); if (!result) { PyErr_Print(); @@ -6171,12 +6164,13 @@ libvirt_virConnectDomainEventGraphicsCallback(virConnectPtr conn ATTRIBUTE_UNUSE if (pair == NULL) goto cleanup; + PyList_SetItem(pyobj_subject, i, pair); + PyTuple_SetItem(pair, 0, libvirt_constcharPtrWrap(subject->identities[i].type)); PyTuple_SetItem(pair, 1, libvirt_constcharPtrWrap(subject->identities[i].name)); - PyList_SetItem(pyobj_subject, i, pair); } /* Call the Callback Dispatcher */ @@ -7751,6 +7745,9 @@ libvirt_virNodeGetCPUMap(PyObject *self ATTRIBUTE_UNUSED, if ((pycpumap = PyList_New(i_retval)) == NULL) goto error; + if (PyTuple_SetItem(ret, 1, pycpumap) < 0) + goto error; + for (i = 0; i < i_retval; i++) { if ((pyused = PyBool_FromLong(VIR_CPU_USED(cpumap, i))) == NULL) goto error; @@ -7758,9 +7755,6 @@ libvirt_virNodeGetCPUMap(PyObject *self ATTRIBUTE_UNUSED, goto error; } - if (PyTuple_SetItem(ret, 1, pycpumap) < 0) - goto error; - /* 2: number of online CPUs */ if ((pyonline = libvirt_uintWrap(online)) == NULL || PyTuple_SetItem(ret, 2, pyonline) < 0) @@ -7769,12 +7763,9 @@ libvirt_virNodeGetCPUMap(PyObject *self ATTRIBUTE_UNUSED, cleanup: VIR_FREE(cpumap); return ret; + error: Py_CLEAR(ret); - Py_XDECREF(pycpumap); - Py_XDECREF(pyused); - Py_XDECREF(pycpunum); - Py_XDECREF(pyonline); goto cleanup; } #endif /* LIBVIR_CHECK_VERSION(1, 0, 0) */ @@ -8149,6 +8140,12 @@ libvirt_virNodeGetFreePages(PyObject *self ATTRIBUTE_UNUSED, goto cleanup; } + if (PyDict_SetItem(pyobj_counts, node, per_node) < 0) { + Py_XDECREF(per_node); + Py_XDECREF(node); + goto cleanup; + } + for (j = 0; j < pyobj_pagesize_size; j ++) { PyObject *page = NULL; PyObject *count = NULL; @@ -8164,12 +8161,6 @@ libvirt_virNodeGetFreePages(PyObject *self ATTRIBUTE_UNUSED, } } i += pyobj_pagesize_size; - - if (PyDict_SetItem(pyobj_counts, node, per_node) < 0) { - Py_XDECREF(per_node); - Py_XDECREF(node); - goto cleanup; - } } py_retval = pyobj_counts; @@ -8220,6 +8211,9 @@ libvirt_virNetworkGetDHCPLeases(PyObject *self ATTRIBUTE_UNUSED, if ((py_lease = PyDict_New()) == NULL) goto error; + if (PyList_SetItem(py_retval, i, py_lease) < 0) + goto error; + #define VIR_SET_LEASE_ITEM(NAME, VALUE_OBJ_FUNC) \ do { \ PyObject *tmp_val; \ @@ -8244,15 +8238,9 @@ libvirt_virNetworkGetDHCPLeases(PyObject *self ATTRIBUTE_UNUSED, VIR_SET_LEASE_ITEM("iaid", libvirt_charPtrWrap(lease->iaid)); #undef VIR_SET_LEASE_ITEM - - if (PyList_SetItem(py_retval, i, py_lease) < 0) - goto error; - - py_lease = NULL; } cleanup: - Py_XDECREF(py_lease); if (leases) { for (i = 0; i < leases_count; i++) virNetworkDHCPLeaseFree(leases[i]); @@ -8287,6 +8275,9 @@ convertDomainStatsRecord(virDomainStatsRecordPtr *records, if (!(py_record = PyTuple_New(2))) goto error; + if (PyList_SetItem(py_retval, i, py_record) < 0) + goto error; + /* libvirt_virDomainPtrWrap steals the object */ virDomainRef(records[i]->dom); if (!(py_record_domain = libvirt_virDomainPtrWrap(records[i]->dom))) { @@ -8294,33 +8285,21 @@ convertDomainStatsRecord(virDomainStatsRecordPtr *records, goto error; } - if (!(py_record_stats = getPyVirTypedParameter(records[i]->params, - records[i]->nparams))) - goto error; - if (PyTuple_SetItem(py_record, 0, py_record_domain) < 0) goto error; - py_record_domain = NULL; - - if (PyTuple_SetItem(py_record, 1, py_record_stats) < 0) + if (!(py_record_stats = getPyVirTypedParameter(records[i]->params, + records[i]->nparams))) goto error; - py_record_stats = NULL; - - if (PyList_SetItem(py_retval, i, py_record) < 0) + if (PyTuple_SetItem(py_record, 1, py_record_stats) < 0) goto error; - - py_record = NULL; } return py_retval; error: Py_XDECREF(py_retval); - Py_XDECREF(py_record); - Py_XDECREF(py_record_domain); - Py_XDECREF(py_record_stats); return NULL; } @@ -8546,13 +8525,15 @@ libvirt_virDomainGetFSInfo(PyObject *self ATTRIBUTE_UNUSED, if (info == NULL) goto cleanup; PyList_SetItem(py_retval, i, info); - alias = PyList_New(0); - if (alias == NULL) - goto cleanup; PyTuple_SetItem(info, 0, libvirt_constcharPtrWrap(fs->mountpoint)); PyTuple_SetItem(info, 1, libvirt_constcharPtrWrap(fs->name)); PyTuple_SetItem(info, 2, libvirt_constcharPtrWrap(fs->fstype)); + + alias = PyList_New(0); + if (alias == NULL) + goto cleanup; + PyTuple_SetItem(info, 3, alias); for (j = 0; j < fs->ndevAlias; j++) -- 2.5.3

On 09/24/2015 10:01 AM, Pavel Hrdina wrote:
This change makes it easier to free allocated object especially for python objects. We can benefit from the fact, that if you call Py_DECREF on eny python object it will also remove reference for all
s/eny/any
assigned object to the root object. For example, calling Py_DECREF on dict will also remove reference recursively on all elements in that dictionary. Our job is then just call Py_DECREF on the root element and don't care about anything else.
Something else that could go in HACKING - usage of Py_[X]DECREF...
Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 189 ++++++++++++++++++++++++----------------------------- 1 file changed, 85 insertions(+), 104 deletions(-)
diff --git a/libvirt-override.c b/libvirt-override.c index 92c31b8..63a469b 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -1238,9 +1238,16 @@ libvirt_virDomainGetVcpus(PyObject *self ATTRIBUTE_UNUSED, goto cleanup; if ((pycpuinfo = PyList_New(dominfo.nrVirtCpu)) == NULL) goto cleanup; + + if (PyTuple_SetItem(pyretval, 0, pycpuinfo) < 0) + goto cleanup; + if ((pycpumap = PyList_New(dominfo.nrVirtCpu)) == NULL) goto cleanup;
+ if (PyTuple_SetItem(pyretval, 1, pycpumap) < 0) + goto cleanup; + for (i = 0; i < dominfo.nrVirtCpu; i++) { PyObject *info = PyTuple_New(4); PyObject *item = NULL; @@ -1248,54 +1255,42 @@ libvirt_virDomainGetVcpus(PyObject *self ATTRIBUTE_UNUSED, if (info == NULL) goto cleanup;
+ if (PyList_SetItem(pycpuinfo, i, info) < 0) + goto cleanup; + if ((item = libvirt_intWrap((long)cpuinfo[i].number)) == NULL || PyTuple_SetItem(info, 0, item) < 0) - goto itemError; + goto cleanup;
if ((item = libvirt_intWrap((long)cpuinfo[i].state)) == NULL || PyTuple_SetItem(info, 1, item) < 0) - goto itemError; + goto cleanup;
if ((item = libvirt_ulonglongWrap(cpuinfo[i].cpuTime)) == NULL || PyTuple_SetItem(info, 2, item) < 0) - goto itemError; + goto cleanup;
if ((item = libvirt_intWrap((long)cpuinfo[i].cpu)) == NULL || PyTuple_SetItem(info, 3, item) < 0) - goto itemError; - - if (PyList_SetItem(pycpuinfo, i, info) < 0) - goto itemError; - - continue; - itemError: - Py_DECREF(info); - Py_XDECREF(item); - goto cleanup; + goto cleanup; } for (i = 0; i < dominfo.nrVirtCpu; i++) { PyObject *info = PyTuple_New(cpunum); size_t j; if (info == NULL) goto cleanup; + + if (PyList_SetItem(pycpumap, i, info) < 0) + goto cleanup; + for (j = 0; j < cpunum; j++) { PyObject *item = NULL; if ((item = PyBool_FromLong(VIR_CPU_USABLE(cpumap, cpumaplen, i, j))) == NULL || - PyTuple_SetItem(info, j, item) < 0) { - Py_DECREF(info); - Py_XDECREF(item); + PyTuple_SetItem(info, j, item) < 0) goto cleanup; - } - } - if (PyList_SetItem(pycpumap, i, info) < 0) { - Py_DECREF(info); - goto cleanup; } } - if (PyTuple_SetItem(pyretval, 0, pycpuinfo) < 0 || - PyTuple_SetItem(pyretval, 1, pycpumap) < 0) - goto cleanup;
VIR_FREE(cpuinfo); VIR_FREE(cpumap); @@ -1306,8 +1301,6 @@ libvirt_virDomainGetVcpus(PyObject *self ATTRIBUTE_UNUSED, VIR_FREE(cpuinfo); VIR_FREE(cpumap); Py_XDECREF(pyretval); - Py_XDECREF(pycpuinfo); - Py_XDECREF(pycpumap); return error; }
Splatter from bleeding eyeballs - perhaps would have been easier to read with incremental change ;-)
@@ -1489,12 +1482,13 @@ libvirt_virDomainGetVcpuPinInfo(PyObject *self ATTRIBUTE_UNUSED, if (mapinfo == NULL) goto cleanup;
+ PyList_SetItem(pycpumaps, vcpu, mapinfo); + for (pcpu = 0; pcpu < cpunum; pcpu++) { PyTuple_SetItem(mapinfo, pcpu, PyBool_FromLong(VIR_CPU_USABLE(cpumaps, cpumaplen, vcpu, pcpu))); } - PyList_SetItem(pycpumaps, vcpu, mapinfo); }
VIR_FREE(cpumaps); @@ -1877,12 +1871,14 @@ libvirt_virErrorFuncHandler(ATTRIBUTE_UNUSED void *ctx, if ((list = PyTuple_New(2)) == NULL) goto cleanup;
+ Py_XINCREF(libvirt_virPythonErrorFuncCtxt); + PyTuple_SetItem(list, 0, libvirt_virPythonErrorFuncCtxt); + if ((info = PyTuple_New(9)) == NULL) goto cleanup;
- PyTuple_SetItem(list, 0, libvirt_virPythonErrorFuncCtxt); PyTuple_SetItem(list, 1, info); - Py_XINCREF(libvirt_virPythonErrorFuncCtxt); + PyTuple_SetItem(info, 0, libvirt_intWrap((long) err->code)); PyTuple_SetItem(info, 1, libvirt_intWrap((long) err->domain)); PyTuple_SetItem(info, 2, libvirt_constcharPtrWrap(err->message)); @@ -1894,14 +1890,11 @@ libvirt_virErrorFuncHandler(ATTRIBUTE_UNUSED void *ctx, PyTuple_SetItem(info, 8, libvirt_intWrap((long) err->int2)); /* TODO pass conn and dom if available */ result = PyEval_CallObject(libvirt_virPythonErrorFuncHandler, list); - Py_XDECREF(list); Py_XDECREF(result); }
cleanup: Py_XDECREF(list); - Py_XDECREF(info); -
This one I'm confused by why 'info' is removed... The rest seemed OK - a couple were tough to follow, but not impossible. John
LIBVIRT_RELEASE_THREAD_STATE; }
@@ -1966,6 +1959,8 @@ virConnectCredCallbackWrapper(virConnectCredentialPtr cred, if ((pycred = PyTuple_New(ncred)) == NULL) goto cleanup;
+ PyTuple_SetItem(list, 0, pycred); + for (i = 0; i < ncred; i++) { PyObject *pycreditem = PyList_New(5); if (pycreditem == NULL) @@ -1989,7 +1984,6 @@ virConnectCredCallbackWrapper(virConnectCredentialPtr cred, PyList_SetItem(pycreditem, 4, VIR_PY_NONE); }
- PyTuple_SetItem(list, 0, pycred); Py_XINCREF(pycbdata); PyTuple_SetItem(list, 1, pycbdata);
@@ -4720,19 +4714,18 @@ libvirt_virDomainGetBlockJobInfo(PyObject *self ATTRIBUTE_UNUSED, return NULL; domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain);
- if ((dict = PyDict_New()) == NULL) - return NULL; - LIBVIRT_BEGIN_ALLOW_THREADS; c_ret = virDomainGetBlockJobInfo(domain, path, &info, flags); LIBVIRT_END_ALLOW_THREADS;
- if (c_ret == 0) { - return dict; - } else if (c_ret < 0) { - Py_DECREF(dict); + if (c_ret < 0) return VIR_PY_NONE; - } + + if ((dict = PyDict_New()) == NULL) + return NULL; + + if (c_ret == 0) + return dict;
if ((type = libvirt_intWrap(info.type)) == NULL || PyDict_SetItemString(dict, "type", type) < 0) @@ -5270,16 +5263,22 @@ libvirt_virEventAddHandleFunc(int fd, virFreeCallback ff) { PyObject *result; - PyObject *python_cb; PyObject *cb_obj; PyObject *ff_obj; PyObject *opaque_obj; + PyObject *python_cb = NULL; PyObject *cb_args = NULL; PyObject *pyobj_args = NULL; int retval = -1;
LIBVIRT_ENSURE_THREAD_STATE;
+ if ((pyobj_args = PyTuple_New(4)) == NULL) + goto cleanup; + + PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(fd)); + PyTuple_SetItem(pyobj_args, 1, libvirt_intWrap(event)); + /* Lookup the python callback */ python_cb = libvirt_lookupPythonFunc("_eventInvokeHandleCallback"); if (!python_cb) { @@ -5287,26 +5286,21 @@ libvirt_virEventAddHandleFunc(int fd, } Py_INCREF(python_cb);
- /* create tuple for cb */ - cb_obj = libvirt_virEventHandleCallbackWrap(cb); - ff_obj = libvirt_virFreeCallbackWrap(ff); - opaque_obj = libvirt_virVoidPtrWrap(opaque); + PyTuple_SetItem(pyobj_args, 2, python_cb);
if ((cb_args = PyTuple_New(3)) == NULL) goto cleanup;
+ PyTuple_SetItem(pyobj_args, 3, cb_args); + + /* create tuple for cb */ + cb_obj = libvirt_virEventHandleCallbackWrap(cb); + ff_obj = libvirt_virFreeCallbackWrap(ff); + opaque_obj = libvirt_virVoidPtrWrap(opaque); PyTuple_SetItem(cb_args, 0, cb_obj); PyTuple_SetItem(cb_args, 1, opaque_obj); PyTuple_SetItem(cb_args, 2, ff_obj);
- if ((pyobj_args = PyTuple_New(4)) == NULL) - goto cleanup; - - PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(fd)); - PyTuple_SetItem(pyobj_args, 1, libvirt_intWrap(event)); - PyTuple_SetItem(pyobj_args, 2, python_cb); - PyTuple_SetItem(pyobj_args, 3, cb_args); - result = PyEval_CallObject(addHandleObj, pyobj_args); if (!result) { PyErr_Print(); @@ -5415,33 +5409,32 @@ libvirt_virEventAddTimeoutFunc(int timeout,
LIBVIRT_ENSURE_THREAD_STATE;
+ if ((pyobj_args = PyTuple_New(3)) == NULL) + goto cleanup; + + PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(timeout)); + /* Lookup the python callback */ python_cb = libvirt_lookupPythonFunc("_eventInvokeTimeoutCallback"); if (!python_cb) { goto cleanup; } Py_INCREF(python_cb); + PyTuple_SetItem(pyobj_args, 1, python_cb); + + if ((cb_args = PyTuple_New(3)) == NULL) + goto cleanup; + + PyTuple_SetItem(pyobj_args, 2, cb_args);
/* create tuple for cb */ cb_obj = libvirt_virEventTimeoutCallbackWrap(cb); ff_obj = libvirt_virFreeCallbackWrap(ff); opaque_obj = libvirt_virVoidPtrWrap(opaque); - - if ((cb_args = PyTuple_New(3)) == NULL) - goto cleanup; - PyTuple_SetItem(cb_args, 0, cb_obj); PyTuple_SetItem(cb_args, 1, opaque_obj); PyTuple_SetItem(cb_args, 2, ff_obj);
- pyobj_args = PyTuple_New(3); - if ((pyobj_args = PyTuple_New(3)) == NULL) - goto cleanup; - - PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(timeout)); - PyTuple_SetItem(pyobj_args, 1, python_cb); - PyTuple_SetItem(pyobj_args, 2, cb_args); - result = PyEval_CallObject(addTimeoutObj, pyobj_args); if (!result) { PyErr_Print(); @@ -6171,12 +6164,13 @@ libvirt_virConnectDomainEventGraphicsCallback(virConnectPtr conn ATTRIBUTE_UNUSE if (pair == NULL) goto cleanup;
+ PyList_SetItem(pyobj_subject, i, pair); + PyTuple_SetItem(pair, 0, libvirt_constcharPtrWrap(subject->identities[i].type)); PyTuple_SetItem(pair, 1, libvirt_constcharPtrWrap(subject->identities[i].name));
- PyList_SetItem(pyobj_subject, i, pair); }
/* Call the Callback Dispatcher */ @@ -7751,6 +7745,9 @@ libvirt_virNodeGetCPUMap(PyObject *self ATTRIBUTE_UNUSED, if ((pycpumap = PyList_New(i_retval)) == NULL) goto error;
+ if (PyTuple_SetItem(ret, 1, pycpumap) < 0) + goto error; + for (i = 0; i < i_retval; i++) { if ((pyused = PyBool_FromLong(VIR_CPU_USED(cpumap, i))) == NULL) goto error; @@ -7758,9 +7755,6 @@ libvirt_virNodeGetCPUMap(PyObject *self ATTRIBUTE_UNUSED, goto error; }
- if (PyTuple_SetItem(ret, 1, pycpumap) < 0) - goto error; - /* 2: number of online CPUs */ if ((pyonline = libvirt_uintWrap(online)) == NULL || PyTuple_SetItem(ret, 2, pyonline) < 0) @@ -7769,12 +7763,9 @@ libvirt_virNodeGetCPUMap(PyObject *self ATTRIBUTE_UNUSED, cleanup: VIR_FREE(cpumap); return ret; + error: Py_CLEAR(ret); - Py_XDECREF(pycpumap); - Py_XDECREF(pyused); - Py_XDECREF(pycpunum); - Py_XDECREF(pyonline); goto cleanup; } #endif /* LIBVIR_CHECK_VERSION(1, 0, 0) */ @@ -8149,6 +8140,12 @@ libvirt_virNodeGetFreePages(PyObject *self ATTRIBUTE_UNUSED, goto cleanup; }
+ if (PyDict_SetItem(pyobj_counts, node, per_node) < 0) { + Py_XDECREF(per_node); + Py_XDECREF(node); + goto cleanup; + } + for (j = 0; j < pyobj_pagesize_size; j ++) { PyObject *page = NULL; PyObject *count = NULL; @@ -8164,12 +8161,6 @@ libvirt_virNodeGetFreePages(PyObject *self ATTRIBUTE_UNUSED, } } i += pyobj_pagesize_size; - - if (PyDict_SetItem(pyobj_counts, node, per_node) < 0) { - Py_XDECREF(per_node); - Py_XDECREF(node); - goto cleanup; - } }
py_retval = pyobj_counts; @@ -8220,6 +8211,9 @@ libvirt_virNetworkGetDHCPLeases(PyObject *self ATTRIBUTE_UNUSED, if ((py_lease = PyDict_New()) == NULL) goto error;
+ if (PyList_SetItem(py_retval, i, py_lease) < 0) + goto error; + #define VIR_SET_LEASE_ITEM(NAME, VALUE_OBJ_FUNC) \ do { \ PyObject *tmp_val; \ @@ -8244,15 +8238,9 @@ libvirt_virNetworkGetDHCPLeases(PyObject *self ATTRIBUTE_UNUSED, VIR_SET_LEASE_ITEM("iaid", libvirt_charPtrWrap(lease->iaid));
#undef VIR_SET_LEASE_ITEM - - if (PyList_SetItem(py_retval, i, py_lease) < 0) - goto error; - - py_lease = NULL; }
cleanup: - Py_XDECREF(py_lease); if (leases) { for (i = 0; i < leases_count; i++) virNetworkDHCPLeaseFree(leases[i]); @@ -8287,6 +8275,9 @@ convertDomainStatsRecord(virDomainStatsRecordPtr *records, if (!(py_record = PyTuple_New(2))) goto error;
+ if (PyList_SetItem(py_retval, i, py_record) < 0) + goto error; + /* libvirt_virDomainPtrWrap steals the object */ virDomainRef(records[i]->dom); if (!(py_record_domain = libvirt_virDomainPtrWrap(records[i]->dom))) { @@ -8294,33 +8285,21 @@ convertDomainStatsRecord(virDomainStatsRecordPtr *records, goto error; }
- if (!(py_record_stats = getPyVirTypedParameter(records[i]->params, - records[i]->nparams))) - goto error; - if (PyTuple_SetItem(py_record, 0, py_record_domain) < 0) goto error;
- py_record_domain = NULL; - - if (PyTuple_SetItem(py_record, 1, py_record_stats) < 0) + if (!(py_record_stats = getPyVirTypedParameter(records[i]->params, + records[i]->nparams))) goto error;
- py_record_stats = NULL; - - if (PyList_SetItem(py_retval, i, py_record) < 0) + if (PyTuple_SetItem(py_record, 1, py_record_stats) < 0) goto error; - - py_record = NULL; }
return py_retval;
error: Py_XDECREF(py_retval); - Py_XDECREF(py_record); - Py_XDECREF(py_record_domain); - Py_XDECREF(py_record_stats); return NULL; }
@@ -8546,13 +8525,15 @@ libvirt_virDomainGetFSInfo(PyObject *self ATTRIBUTE_UNUSED, if (info == NULL) goto cleanup; PyList_SetItem(py_retval, i, info); - alias = PyList_New(0); - if (alias == NULL) - goto cleanup;
PyTuple_SetItem(info, 0, libvirt_constcharPtrWrap(fs->mountpoint)); PyTuple_SetItem(info, 1, libvirt_constcharPtrWrap(fs->name)); PyTuple_SetItem(info, 2, libvirt_constcharPtrWrap(fs->fstype)); + + alias = PyList_New(0); + if (alias == NULL) + goto cleanup; + PyTuple_SetItem(info, 3, alias);
for (j = 0; j < fs->ndevAlias; j++)

On Sat, Sep 26, 2015 at 09:56:03AM -0400, John Ferlan wrote:
On 09/24/2015 10:01 AM, Pavel Hrdina wrote:
This change makes it easier to free allocated object especially for python objects. We can benefit from the fact, that if you call Py_DECREF on eny python object it will also remove reference for all
s/eny/any
assigned object to the root object. For example, calling Py_DECREF on dict will also remove reference recursively on all elements in that dictionary. Our job is then just call Py_DECREF on the root element and don't care about anything else.
Something else that could go in HACKING - usage of Py_[X]DECREF...
That's true, I can probably updated it during second "phase" of improving libvirt-python. I'm planning to improve the generator in order to automatically generate more APIs.
Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 189 ++++++++++++++++++++++++----------------------------- 1 file changed, 85 insertions(+), 104 deletions(-)
diff --git a/libvirt-override.c b/libvirt-override.c index 92c31b8..63a469b 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -1238,9 +1238,16 @@ libvirt_virDomainGetVcpus(PyObject *self ATTRIBUTE_UNUSED, goto cleanup; if ((pycpuinfo = PyList_New(dominfo.nrVirtCpu)) == NULL) goto cleanup; + + if (PyTuple_SetItem(pyretval, 0, pycpuinfo) < 0) + goto cleanup; + if ((pycpumap = PyList_New(dominfo.nrVirtCpu)) == NULL) goto cleanup;
+ if (PyTuple_SetItem(pyretval, 1, pycpumap) < 0) + goto cleanup; + for (i = 0; i < dominfo.nrVirtCpu; i++) { PyObject *info = PyTuple_New(4); PyObject *item = NULL; @@ -1248,54 +1255,42 @@ libvirt_virDomainGetVcpus(PyObject *self ATTRIBUTE_UNUSED, if (info == NULL) goto cleanup;
+ if (PyList_SetItem(pycpuinfo, i, info) < 0) + goto cleanup; + if ((item = libvirt_intWrap((long)cpuinfo[i].number)) == NULL || PyTuple_SetItem(info, 0, item) < 0) - goto itemError; + goto cleanup;
if ((item = libvirt_intWrap((long)cpuinfo[i].state)) == NULL || PyTuple_SetItem(info, 1, item) < 0) - goto itemError; + goto cleanup;
if ((item = libvirt_ulonglongWrap(cpuinfo[i].cpuTime)) == NULL || PyTuple_SetItem(info, 2, item) < 0) - goto itemError; + goto cleanup;
if ((item = libvirt_intWrap((long)cpuinfo[i].cpu)) == NULL || PyTuple_SetItem(info, 3, item) < 0) - goto itemError; - - if (PyList_SetItem(pycpuinfo, i, info) < 0) - goto itemError; - - continue; - itemError: - Py_DECREF(info); - Py_XDECREF(item); - goto cleanup; + goto cleanup; } for (i = 0; i < dominfo.nrVirtCpu; i++) { PyObject *info = PyTuple_New(cpunum); size_t j; if (info == NULL) goto cleanup; + + if (PyList_SetItem(pycpumap, i, info) < 0) + goto cleanup; + for (j = 0; j < cpunum; j++) { PyObject *item = NULL; if ((item = PyBool_FromLong(VIR_CPU_USABLE(cpumap, cpumaplen, i, j))) == NULL || - PyTuple_SetItem(info, j, item) < 0) { - Py_DECREF(info); - Py_XDECREF(item); + PyTuple_SetItem(info, j, item) < 0) goto cleanup; - } - } - if (PyList_SetItem(pycpumap, i, info) < 0) { - Py_DECREF(info); - goto cleanup; } } - if (PyTuple_SetItem(pyretval, 0, pycpuinfo) < 0 || - PyTuple_SetItem(pyretval, 1, pycpumap) < 0) - goto cleanup;
VIR_FREE(cpuinfo); VIR_FREE(cpumap); @@ -1306,8 +1301,6 @@ libvirt_virDomainGetVcpus(PyObject *self ATTRIBUTE_UNUSED, VIR_FREE(cpuinfo); VIR_FREE(cpumap); Py_XDECREF(pyretval); - Py_XDECREF(pycpuinfo); - Py_XDECREF(pycpumap); return error; }
Splatter from bleeding eyeballs - perhaps would have been easier to read with incremental change ;-)
@@ -1489,12 +1482,13 @@ libvirt_virDomainGetVcpuPinInfo(PyObject *self ATTRIBUTE_UNUSED, if (mapinfo == NULL) goto cleanup;
+ PyList_SetItem(pycpumaps, vcpu, mapinfo); + for (pcpu = 0; pcpu < cpunum; pcpu++) { PyTuple_SetItem(mapinfo, pcpu, PyBool_FromLong(VIR_CPU_USABLE(cpumaps, cpumaplen, vcpu, pcpu))); } - PyList_SetItem(pycpumaps, vcpu, mapinfo); }
VIR_FREE(cpumaps); @@ -1877,12 +1871,14 @@ libvirt_virErrorFuncHandler(ATTRIBUTE_UNUSED void *ctx, if ((list = PyTuple_New(2)) == NULL) goto cleanup;
+ Py_XINCREF(libvirt_virPythonErrorFuncCtxt); + PyTuple_SetItem(list, 0, libvirt_virPythonErrorFuncCtxt); + if ((info = PyTuple_New(9)) == NULL) goto cleanup;
- PyTuple_SetItem(list, 0, libvirt_virPythonErrorFuncCtxt); PyTuple_SetItem(list, 1, info); - Py_XINCREF(libvirt_virPythonErrorFuncCtxt); + PyTuple_SetItem(info, 0, libvirt_intWrap((long) err->code)); PyTuple_SetItem(info, 1, libvirt_intWrap((long) err->domain)); PyTuple_SetItem(info, 2, libvirt_constcharPtrWrap(err->message)); @@ -1894,14 +1890,11 @@ libvirt_virErrorFuncHandler(ATTRIBUTE_UNUSED void *ctx, PyTuple_SetItem(info, 8, libvirt_intWrap((long) err->int2)); /* TODO pass conn and dom if available */ result = PyEval_CallObject(libvirt_virPythonErrorFuncHandler, list); - Py_XDECREF(list); Py_XDECREF(result); }
cleanup: Py_XDECREF(list); - Py_XDECREF(info); -
This one I'm confused by why 'info' is removed...
The 'info' is inserted to list right after it's allocation, so it's sufficient to decref only list. Pavel
The rest seemed OK - a couple were tough to follow, but not impossible.
John
LIBVIRT_RELEASE_THREAD_STATE; }
[...]

Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 140 ++++++++++++++++------------------------------------- 1 file changed, 43 insertions(+), 97 deletions(-) diff --git a/libvirt-override.c b/libvirt-override.c index 63a469b..8afe7d7 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -2869,7 +2869,6 @@ static PyObject * libvirt_virDomainGetUUID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { - PyObject *py_retval; unsigned char uuid[VIR_UUID_BUFLEN]; virDomainPtr domain; PyObject *pyobj_domain; @@ -2887,16 +2886,14 @@ libvirt_virDomainGetUUID(PyObject *self ATTRIBUTE_UNUSED, if (c_retval < 0) return VIR_PY_NONE; - py_retval = libvirt_charPtrSizeWrap((char *) &uuid[0], VIR_UUID_BUFLEN); - return py_retval; + return libvirt_charPtrSizeWrap((char *) &uuid[0], VIR_UUID_BUFLEN); } static PyObject * libvirt_virDomainGetUUIDString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { - PyObject *py_retval; char uuidstr[VIR_UUID_STRING_BUFLEN]; virDomainPtr dom; PyObject *pyobj_dom; @@ -2916,15 +2913,13 @@ libvirt_virDomainGetUUIDString(PyObject *self ATTRIBUTE_UNUSED, if (c_retval < 0) return VIR_PY_NONE; - py_retval = libvirt_constcharPtrWrap((char *) &uuidstr[0]); - return py_retval; + return libvirt_constcharPtrWrap((char *) &uuidstr[0]); } static PyObject * libvirt_virDomainLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { - PyObject *py_retval; virDomainPtr c_retval; virConnectPtr conn; PyObject *pyobj_conn; @@ -2942,8 +2937,8 @@ libvirt_virDomainLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, LIBVIRT_BEGIN_ALLOW_THREADS; c_retval = virDomainLookupByUUID(conn, uuid); LIBVIRT_END_ALLOW_THREADS; - py_retval = libvirt_virDomainPtrWrap((virDomainPtr) c_retval); - return py_retval; + + return libvirt_virDomainPtrWrap((virDomainPtr) c_retval); } @@ -3101,7 +3096,6 @@ static PyObject * libvirt_virNetworkGetUUID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { - PyObject *py_retval; unsigned char uuid[VIR_UUID_BUFLEN]; virNetworkPtr domain; PyObject *pyobj_domain; @@ -3119,16 +3113,14 @@ libvirt_virNetworkGetUUID(PyObject *self ATTRIBUTE_UNUSED, if (c_retval < 0) return VIR_PY_NONE; - py_retval = libvirt_charPtrSizeWrap((char *) &uuid[0], VIR_UUID_BUFLEN); - return py_retval; + return libvirt_charPtrSizeWrap((char *) &uuid[0], VIR_UUID_BUFLEN); } static PyObject * libvirt_virNetworkGetUUIDString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { - PyObject *py_retval; char uuidstr[VIR_UUID_STRING_BUFLEN]; virNetworkPtr net; PyObject *pyobj_net; @@ -3148,15 +3140,13 @@ libvirt_virNetworkGetUUIDString(PyObject *self ATTRIBUTE_UNUSED, if (c_retval < 0) return VIR_PY_NONE; - py_retval = libvirt_constcharPtrWrap((char *) &uuidstr[0]); - return py_retval; + return libvirt_constcharPtrWrap((char *) &uuidstr[0]); } static PyObject * libvirt_virNetworkLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { - PyObject *py_retval; virNetworkPtr c_retval; virConnectPtr conn; PyObject *pyobj_conn; @@ -3174,8 +3164,8 @@ libvirt_virNetworkLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, LIBVIRT_BEGIN_ALLOW_THREADS; c_retval = virNetworkLookupByUUID(conn, uuid); LIBVIRT_END_ALLOW_THREADS; - py_retval = libvirt_virNetworkPtrWrap((virNetworkPtr) c_retval); - return py_retval; + + return libvirt_virNetworkPtrWrap((virNetworkPtr) c_retval); } @@ -3183,7 +3173,6 @@ static PyObject * libvirt_virDomainGetAutostart(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { - PyObject *py_retval; int c_retval, autostart; virDomainPtr domain; PyObject *pyobj_domain; @@ -3200,8 +3189,8 @@ libvirt_virDomainGetAutostart(PyObject *self ATTRIBUTE_UNUSED, if (c_retval < 0) return VIR_PY_INT_FAIL; - py_retval = libvirt_intWrap(autostart); - return py_retval; + + return libvirt_intWrap(autostart); } @@ -3209,7 +3198,6 @@ static PyObject * libvirt_virNetworkGetAutostart(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { - PyObject *py_retval; int c_retval, autostart; virNetworkPtr network; PyObject *pyobj_network; @@ -3226,8 +3214,8 @@ libvirt_virNetworkGetAutostart(PyObject *self ATTRIBUTE_UNUSED, if (c_retval < 0) return VIR_PY_INT_FAIL; - py_retval = libvirt_intWrap(autostart); - return py_retval; + + return libvirt_intWrap(autostart); } static PyObject * @@ -3670,7 +3658,6 @@ static PyObject * libvirt_virStoragePoolGetAutostart(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { - PyObject *py_retval; int c_retval, autostart; virStoragePoolPtr pool; PyObject *pyobj_pool; @@ -3688,8 +3675,7 @@ libvirt_virStoragePoolGetAutostart(PyObject *self ATTRIBUTE_UNUSED, if (c_retval < 0) return VIR_PY_INT_FAIL; - py_retval = libvirt_intWrap(autostart); - return py_retval; + return libvirt_intWrap(autostart); } static PyObject * @@ -3761,7 +3747,6 @@ static PyObject * libvirt_virStoragePoolGetUUID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { - PyObject *py_retval; unsigned char uuid[VIR_UUID_BUFLEN]; virStoragePoolPtr pool; PyObject *pyobj_pool; @@ -3780,16 +3765,13 @@ libvirt_virStoragePoolGetUUID(PyObject *self ATTRIBUTE_UNUSED, if (c_retval < 0) return VIR_PY_NONE; - py_retval = libvirt_charPtrSizeWrap((char *) &uuid[0], VIR_UUID_BUFLEN); - - return py_retval; + return libvirt_charPtrSizeWrap((char *) &uuid[0], VIR_UUID_BUFLEN); } static PyObject * libvirt_virStoragePoolGetUUIDString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { - PyObject *py_retval; char uuidstr[VIR_UUID_STRING_BUFLEN]; virStoragePoolPtr pool; PyObject *pyobj_pool; @@ -3809,15 +3791,13 @@ libvirt_virStoragePoolGetUUIDString(PyObject *self ATTRIBUTE_UNUSED, if (c_retval < 0) return VIR_PY_NONE; - py_retval = libvirt_constcharPtrWrap((char *) &uuidstr[0]); - return py_retval; + return libvirt_constcharPtrWrap((char *) &uuidstr[0]); } static PyObject * libvirt_virStoragePoolLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { - PyObject *py_retval; virStoragePoolPtr c_retval; virConnectPtr conn; PyObject *pyobj_conn; @@ -3835,8 +3815,8 @@ libvirt_virStoragePoolLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, LIBVIRT_BEGIN_ALLOW_THREADS; c_retval = virStoragePoolLookupByUUID(conn, uuid); LIBVIRT_END_ALLOW_THREADS; - py_retval = libvirt_virStoragePoolPtrWrap((virStoragePoolPtr) c_retval); - return py_retval; + + return libvirt_virStoragePoolPtrWrap((virStoragePoolPtr) c_retval); } static PyObject * @@ -3991,7 +3971,6 @@ static PyObject * libvirt_virSecretGetUUID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { - PyObject *py_retval; unsigned char uuid[VIR_UUID_BUFLEN]; virSecretPtr secret; PyObject *pyobj_secret; @@ -4009,16 +3988,14 @@ libvirt_virSecretGetUUID(PyObject *self ATTRIBUTE_UNUSED, if (c_retval < 0) return VIR_PY_NONE; - py_retval = libvirt_charPtrSizeWrap((char *) &uuid[0], VIR_UUID_BUFLEN); - return py_retval; + return libvirt_charPtrSizeWrap((char *) &uuid[0], VIR_UUID_BUFLEN); } static PyObject * libvirt_virSecretGetUUIDString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { - PyObject *py_retval; char uuidstr[VIR_UUID_STRING_BUFLEN]; virSecretPtr dom; PyObject *pyobj_dom; @@ -4038,15 +4015,13 @@ libvirt_virSecretGetUUIDString(PyObject *self ATTRIBUTE_UNUSED, if (c_retval < 0) return VIR_PY_NONE; - py_retval = libvirt_constcharPtrWrap((char *) &uuidstr[0]); - return py_retval; + return libvirt_constcharPtrWrap((char *) &uuidstr[0]); } static PyObject * libvirt_virSecretLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { - PyObject *py_retval; virSecretPtr c_retval; virConnectPtr conn; PyObject *pyobj_conn; @@ -4064,8 +4039,8 @@ libvirt_virSecretLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, LIBVIRT_BEGIN_ALLOW_THREADS; c_retval = virSecretLookupByUUID(conn, uuid); LIBVIRT_END_ALLOW_THREADS; - py_retval = libvirt_virSecretPtrWrap((virSecretPtr) c_retval); - return py_retval; + + return libvirt_virSecretPtrWrap((virSecretPtr) c_retval); } @@ -4198,7 +4173,6 @@ static PyObject * libvirt_virSecretSetValue(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { - PyObject *py_retval; int c_retval; virSecretPtr secret; PyObject *pyobj_secret; @@ -4216,15 +4190,13 @@ libvirt_virSecretSetValue(PyObject *self ATTRIBUTE_UNUSED, flags); LIBVIRT_END_ALLOW_THREADS; - py_retval = libvirt_intWrap(c_retval); - return py_retval; + return libvirt_intWrap(c_retval); } static PyObject * libvirt_virNWFilterGetUUID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { - PyObject *py_retval; unsigned char uuid[VIR_UUID_BUFLEN]; virNWFilterPtr nwfilter; PyObject *pyobj_nwfilter; @@ -4243,16 +4215,14 @@ libvirt_virNWFilterGetUUID(PyObject *self ATTRIBUTE_UNUSED, if (c_retval < 0) return VIR_PY_NONE; - py_retval = libvirt_charPtrSizeWrap((char *) &uuid[0], VIR_UUID_BUFLEN); - return py_retval; + return libvirt_charPtrSizeWrap((char *) &uuid[0], VIR_UUID_BUFLEN); } static PyObject * libvirt_virNWFilterGetUUIDString(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { - PyObject *py_retval; char uuidstr[VIR_UUID_STRING_BUFLEN]; virNWFilterPtr nwfilter; PyObject *pyobj_nwfilter; @@ -4272,15 +4242,13 @@ libvirt_virNWFilterGetUUIDString(PyObject *self ATTRIBUTE_UNUSED, if (c_retval < 0) return VIR_PY_NONE; - py_retval = libvirt_constcharPtrWrap((char *) &uuidstr[0]); - return py_retval; + return libvirt_constcharPtrWrap((char *) &uuidstr[0]); } static PyObject * libvirt_virNWFilterLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { - PyObject *py_retval; virNWFilterPtr c_retval; virConnectPtr conn; PyObject *pyobj_conn; @@ -4298,8 +4266,8 @@ libvirt_virNWFilterLookupByUUID(PyObject *self ATTRIBUTE_UNUSED, LIBVIRT_BEGIN_ALLOW_THREADS; c_retval = virNWFilterLookupByUUID(conn, uuid); LIBVIRT_END_ALLOW_THREADS; - py_retval = libvirt_virNWFilterPtrWrap((virNWFilterPtr) c_retval); - return py_retval; + + return libvirt_virNWFilterPtrWrap((virNWFilterPtr) c_retval); } @@ -5178,7 +5146,6 @@ static PyObject * libvirt_virConnectDomainEventRegister(ATTRIBUTE_UNUSED PyObject *self, PyObject *args) { - PyObject *py_retval; /* return value */ PyObject *pyobj_conn; /* virConnectPtr */ PyObject *pyobj_conn_inst; /* virConnect Python object */ @@ -5203,15 +5170,13 @@ libvirt_virConnectDomainEventRegister(ATTRIBUTE_UNUSED PyObject *self, LIBVIRT_END_ALLOW_THREADS; - py_retval = libvirt_intWrap(ret); - return py_retval; + return libvirt_intWrap(ret); } static PyObject * libvirt_virConnectDomainEventDeregister(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { - PyObject *py_retval; PyObject *pyobj_conn; PyObject *pyobj_conn_inst; @@ -5233,8 +5198,7 @@ libvirt_virConnectDomainEventDeregister(PyObject *self ATTRIBUTE_UNUSED, LIBVIRT_END_ALLOW_THREADS; Py_DECREF(pyobj_conn_inst); - py_retval = libvirt_intWrap(ret); - return py_retval; + return libvirt_intWrap(ret); } /******************************************* @@ -5681,7 +5645,6 @@ static PyObject * libvirt_virEventAddHandle(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { - PyObject *py_retval; PyObject *pyobj_cbData; virEventHandleCallback cb = libvirt_virEventHandleCallback; int events; @@ -5702,8 +5665,7 @@ libvirt_virEventAddHandle(PyObject *self ATTRIBUTE_UNUSED, Py_DECREF(pyobj_cbData); } - py_retval = libvirt_intWrap(ret); - return py_retval; + return libvirt_intWrap(ret); } static void @@ -5746,7 +5708,6 @@ static PyObject * libvirt_virEventAddTimeout(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { - PyObject *py_retval; PyObject *pyobj_cbData; virEventTimeoutCallback cb = libvirt_virEventTimeoutCallback; int timeout; @@ -5766,8 +5727,7 @@ libvirt_virEventAddTimeout(PyObject *self ATTRIBUTE_UNUSED, Py_DECREF(pyobj_cbData); } - py_retval = libvirt_intWrap(ret); - return py_retval; + return libvirt_intWrap(ret); } static void @@ -6920,7 +6880,6 @@ static PyObject * libvirt_virConnectDomainEventDeregisterAny(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { - PyObject *py_retval; PyObject *pyobj_conn; int callbackID; virConnectPtr conn; @@ -6939,8 +6898,8 @@ libvirt_virConnectDomainEventDeregisterAny(PyObject *self ATTRIBUTE_UNUSED, ret = virConnectDomainEventDeregisterAny(conn, callbackID); LIBVIRT_END_ALLOW_THREADS; - py_retval = libvirt_intWrap(ret); - return py_retval; + + return libvirt_intWrap(ret); } #if LIBVIR_CHECK_VERSION(1, 2, 1) @@ -7011,7 +6970,6 @@ static PyObject * libvirt_virConnectNetworkEventRegisterAny(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { - PyObject *py_retval; /* return value */ PyObject *pyobj_conn; /* virConnectPtr */ PyObject *pyobj_net; PyObject *pyobj_cbData; /* hash of callback data */ @@ -7059,15 +7017,13 @@ libvirt_virConnectNetworkEventRegisterAny(PyObject *self ATTRIBUTE_UNUSED, Py_DECREF(pyobj_cbData); } - py_retval = libvirt_intWrap(ret); - return py_retval; + return libvirt_intWrap(ret); } static PyObject * libvirt_virConnectNetworkEventDeregisterAny(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { - PyObject *py_retval; PyObject *pyobj_conn; int callbackID; virConnectPtr conn; @@ -7086,8 +7042,8 @@ libvirt_virConnectNetworkEventDeregisterAny(PyObject *self ATTRIBUTE_UNUSED, ret = virConnectNetworkEventDeregisterAny(conn, callbackID); LIBVIRT_END_ALLOW_THREADS; - py_retval = libvirt_intWrap(ret); - return py_retval; + + return libvirt_intWrap(ret); } #endif /* LIBVIR_CHECK_VERSION(1, 2, 1)*/ @@ -7133,7 +7089,6 @@ static PyObject * libvirt_virConnectRegisterCloseCallback(PyObject * self ATTRIBUTE_UNUSED, PyObject * args) { - PyObject *py_retval; /* return value */ PyObject *pyobj_conn; /* virConnectPtr */ PyObject *pyobj_cbData; /* hash of callback data */ virConnectPtr conn; @@ -7160,15 +7115,13 @@ libvirt_virConnectRegisterCloseCallback(PyObject * self ATTRIBUTE_UNUSED, Py_DECREF(pyobj_cbData); } - py_retval = libvirt_intWrap(ret); - return py_retval; + return libvirt_intWrap(ret); } static PyObject * libvirt_virConnectUnregisterCloseCallback(PyObject * self ATTRIBUTE_UNUSED, PyObject * args) { - PyObject *py_retval; PyObject *pyobj_conn; virConnectPtr conn; int ret = 0; @@ -7188,8 +7141,8 @@ libvirt_virConnectUnregisterCloseCallback(PyObject * self ATTRIBUTE_UNUSED, libvirt_virConnectCloseCallbackDispatch); LIBVIRT_END_ALLOW_THREADS; - py_retval = libvirt_intWrap(ret); - return py_retval; + + return libvirt_intWrap(ret); } #endif /* LIBVIR_CHECK_VERSION(0, 10, 0) */ @@ -7241,7 +7194,6 @@ static PyObject * libvirt_virStreamEventAddCallback(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { - PyObject *py_retval; PyObject *pyobj_stream; PyObject *pyobj_cbData; virStreamPtr stream; @@ -7268,8 +7220,7 @@ libvirt_virStreamEventAddCallback(PyObject *self ATTRIBUTE_UNUSED, Py_DECREF(pyobj_cbData); } - py_retval = libvirt_intWrap(ret); - return py_retval; + return libvirt_intWrap(ret); } static PyObject * @@ -7312,7 +7263,6 @@ static PyObject * libvirt_virStreamSend(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { - PyObject *py_retval; PyObject *pyobj_stream; PyObject *pyobj_data; virStreamPtr stream; @@ -7333,15 +7283,13 @@ libvirt_virStreamSend(PyObject *self ATTRIBUTE_UNUSED, DEBUG("StreamSend ret=%d\n", ret); - py_retval = libvirt_intWrap(ret); - return py_retval; + return libvirt_intWrap(ret); } static PyObject * libvirt_virDomainSendKey(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { - PyObject *py_retval; virDomainPtr domain; PyObject *pyobj_domain; PyObject *pyobj_list; @@ -7380,8 +7328,7 @@ libvirt_virDomainSendKey(PyObject *self ATTRIBUTE_UNUSED, DEBUG("virDomainSendKey ret=%d\n", ret); - py_retval = libvirt_intWrap(ret); - return py_retval; + return libvirt_intWrap(ret); } #if LIBVIR_CHECK_VERSION(1, 0, 3) @@ -7417,7 +7364,6 @@ static PyObject * libvirt_virDomainMigrateGetMaxSpeed(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) { - PyObject *py_retval; int c_retval; unsigned long bandwidth; virDomainPtr domain; @@ -7436,8 +7382,8 @@ libvirt_virDomainMigrateGetMaxSpeed(PyObject *self ATTRIBUTE_UNUSED, if (c_retval < 0) return VIR_PY_INT_FAIL; - py_retval = libvirt_ulongWrap(bandwidth); - return py_retval; + + return libvirt_ulongWrap(bandwidth); } #if LIBVIR_CHECK_VERSION(1, 1, 0) -- 2.5.3

This removes several code duplicates and also some unusual code structures. Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 159 +++++++++++++++++++++++------------------------------ 1 file changed, 68 insertions(+), 91 deletions(-) diff --git a/libvirt-override.c b/libvirt-override.c index 8afe7d7..205f0dd 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -439,13 +439,13 @@ libvirt_virDomainGetSchedulerType(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE; /* convert to a Python tuple of long objects */ - if ((info = PyTuple_New(2)) == NULL) { - VIR_FREE(c_retval); - return NULL; - } + if ((info = PyTuple_New(2)) == NULL) + goto cleanup; PyTuple_SetItem(info, 0, libvirt_constcharPtrWrap(c_retval)); PyTuple_SetItem(info, 1, libvirt_intWrap((long)nparams)); + + cleanup: VIR_FREE(c_retval); return info; } @@ -2401,7 +2401,6 @@ libvirt_virDomainSnapshotListNames(PyObject *self ATTRIBUTE_UNUSED, Py_CLEAR(py_retval); goto cleanup; } - VIR_FREE(names[i]); } cleanup: @@ -3245,8 +3244,8 @@ libvirt_virNodeGetCellsFreeMemory(PyObject *self ATTRIBUTE_UNUSED, LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) { - VIR_FREE(freeMems); - return VIR_PY_NONE; + py_retval = VIR_PY_NONE; + goto cleanup; } if ((py_retval = PyList_New(c_retval)) == NULL) @@ -3425,24 +3424,19 @@ libvirt_virConnectListStoragePools(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE; } } - py_retval = PyList_New(c_retval); - if (py_retval == NULL) { - if (names) { - for (i = 0; i < c_retval; i++) - VIR_FREE(names[i]); - VIR_FREE(names); - } - return NULL; - } + + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup; if (names) { - for (i = 0; i < c_retval; i++) { + for (i = 0; i < c_retval; i++) PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - VIR_FREE(names[i]); - } - VIR_FREE(names); } + cleanup: + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); + VIR_FREE(names); return py_retval; } @@ -3480,24 +3474,20 @@ libvirt_virConnectListDefinedStoragePools(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE; } } - py_retval = PyList_New(c_retval); - if (py_retval == NULL) { - if (names) { - for (i = 0; i < c_retval; i++) - VIR_FREE(names[i]); - VIR_FREE(names); - } - return NULL; - } + + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup; if (names) { - for (i = 0; i < c_retval; i++) { + for (i = 0; i < c_retval; i++) PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - VIR_FREE(names[i]); - } - VIR_FREE(names); } + cleanup: + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); + VIR_FREE(names); + return py_retval; } @@ -3579,28 +3569,24 @@ libvirt_virStoragePoolListVolumes(PyObject *self ATTRIBUTE_UNUSED, c_retval = virStoragePoolListVolumes(pool, names, c_retval); LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) { - VIR_FREE(names); - return VIR_PY_NONE; + py_retval = VIR_PY_NONE; + goto cleanup; } } - py_retval = PyList_New(c_retval); - if (py_retval == NULL) { - if (names) { - for (i = 0; i < c_retval; i++) - VIR_FREE(names[i]); - VIR_FREE(names); - } - return NULL; - } + + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup; if (names) { - for (i = 0; i < c_retval; i++) { + for (i = 0; i < c_retval; i++) PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - VIR_FREE(names[i]); - } - VIR_FREE(names); } + cleanup: + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); + VIR_FREE(names); + return py_retval; } @@ -3850,9 +3836,10 @@ libvirt_virNodeListDevices(PyObject *self ATTRIBUTE_UNUSED, LIBVIRT_BEGIN_ALLOW_THREADS; c_retval = virNodeListDevices(conn, cap, names, c_retval, flags); LIBVIRT_END_ALLOW_THREADS; + if (c_retval < 0) { - VIR_FREE(names); - return VIR_PY_NONE; + py_retval = VIR_PY_NONE; + goto cleanup; } } @@ -3947,8 +3934,8 @@ libvirt_virNodeDeviceListCaps(PyObject *self ATTRIBUTE_UNUSED, c_retval = virNodeDeviceListCaps(dev, names, c_retval); LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) { - VIR_FREE(names); - return VIR_PY_NONE; + py_retval = VIR_PY_NONE; + goto cleanup; } } @@ -4072,8 +4059,8 @@ libvirt_virConnectListSecrets(PyObject *self ATTRIBUTE_UNUSED, c_retval = virConnectListSecrets(conn, uuids, c_retval); LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) { - VIR_FREE(uuids); - return VIR_PY_NONE; + py_retval = VIR_PY_NONE; + goto cleanup; } } @@ -4404,24 +4391,19 @@ libvirt_virConnectListInterfaces(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE; } } - py_retval = PyList_New(c_retval); - if (py_retval == NULL) { - if (names) { - for (i = 0; i < c_retval; i++) - VIR_FREE(names[i]); - VIR_FREE(names); - } - return NULL; - } + + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup; if (names) { - for (i = 0; i < c_retval; i++) { + for (i = 0; i < c_retval; i++) PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - VIR_FREE(names[i]); - } - VIR_FREE(names); } + cleanup: + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); + VIR_FREE(names); return py_retval; } @@ -4461,24 +4443,19 @@ libvirt_virConnectListDefinedInterfaces(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE; } } - py_retval = PyList_New(c_retval); - if (py_retval == NULL) { - if (names) { - for (i = 0; i < c_retval; i++) - VIR_FREE(names[i]); - VIR_FREE(names); - } - return NULL; - } + + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup; if (names) { - for (i = 0; i < c_retval; i++) { + for (i = 0; i < c_retval; i++) PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - VIR_FREE(names[i]); - } - VIR_FREE(names); } + cleanup: + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); + VIR_FREE(names); return py_retval; } @@ -8459,17 +8436,19 @@ libvirt_virDomainGetFSInfo(PyObject *self ATTRIBUTE_UNUSED, /* convert to a Python list */ if ((py_retval = PyList_New(c_retval)) == NULL) - goto cleanup; + goto error; for (i = 0; i < c_retval; i++) { virDomainFSInfoPtr fs = fsinfo[i]; PyObject *info, *alias; if (fs == NULL) - goto cleanup; + goto error; + info = PyTuple_New(4); if (info == NULL) - goto cleanup; + goto error; + PyList_SetItem(py_retval, i, info); PyTuple_SetItem(info, 0, libvirt_constcharPtrWrap(fs->mountpoint)); @@ -8478,27 +8457,25 @@ libvirt_virDomainGetFSInfo(PyObject *self ATTRIBUTE_UNUSED, alias = PyList_New(0); if (alias == NULL) - goto cleanup; + goto error; PyTuple_SetItem(info, 3, alias); for (j = 0; j < fs->ndevAlias; j++) if (PyList_Append(alias, libvirt_constcharPtrWrap(fs->devAlias[j])) < 0) - goto cleanup; + goto error; } + cleanup: for (i = 0; i < c_retval; i++) virDomainFSInfoFree(fsinfo[i]); VIR_FREE(fsinfo); return py_retval; - cleanup: - for (i = 0; i < c_retval; i++) - virDomainFSInfoFree(fsinfo[i]); - VIR_FREE(fsinfo); - Py_XDECREF(py_retval); - return NULL; + error: + Py_CLEAR(py_retval); + goto cleanup; } #endif /* LIBVIR_CHECK_VERSION(1, 2, 11) */ -- 2.5.3

On 09/24/2015 10:01 AM, Pavel Hrdina wrote:
This removes several code duplicates and also some unusual code structures.
Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 159 +++++++++++++++++++++++------------------------------ 1 file changed, 68 insertions(+), 91 deletions(-)
diff --git a/libvirt-override.c b/libvirt-override.c index 8afe7d7..205f0dd 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -439,13 +439,13 @@ libvirt_virDomainGetSchedulerType(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE;
/* convert to a Python tuple of long objects */ - if ((info = PyTuple_New(2)) == NULL) { - VIR_FREE(c_retval); - return NULL; - } + if ((info = PyTuple_New(2)) == NULL) + goto cleanup;
PyTuple_SetItem(info, 0, libvirt_constcharPtrWrap(c_retval)); PyTuple_SetItem(info, 1, libvirt_intWrap((long)nparams)); + + cleanup: VIR_FREE(c_retval); return info; } @@ -2401,7 +2401,6 @@ libvirt_virDomainSnapshotListNames(PyObject *self ATTRIBUTE_UNUSED, Py_CLEAR(py_retval); goto cleanup; } - VIR_FREE(names[i]); }
cleanup: @@ -3245,8 +3244,8 @@ libvirt_virNodeGetCellsFreeMemory(PyObject *self ATTRIBUTE_UNUSED, LIBVIRT_END_ALLOW_THREADS;
if (c_retval < 0) { - VIR_FREE(freeMems); - return VIR_PY_NONE; + py_retval = VIR_PY_NONE; + goto cleanup; }
if ((py_retval = PyList_New(c_retval)) == NULL) @@ -3425,24 +3424,19 @@ libvirt_virConnectListStoragePools(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE; } } - py_retval = PyList_New(c_retval); - if (py_retval == NULL) { - if (names) { - for (i = 0; i < c_retval; i++) - VIR_FREE(names[i]); - VIR_FREE(names); - } - return NULL; - } + + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup;
if (names) { - for (i = 0; i < c_retval; i++) { + for (i = 0; i < c_retval; i++) PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - VIR_FREE(names[i]); - } - VIR_FREE(names); }
+ cleanup: + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); + VIR_FREE(names); return py_retval; }
@@ -3480,24 +3474,20 @@ libvirt_virConnectListDefinedStoragePools(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE; } } - py_retval = PyList_New(c_retval); - if (py_retval == NULL) { - if (names) { - for (i = 0; i < c_retval; i++) - VIR_FREE(names[i]); - VIR_FREE(names); - } - return NULL; - } + + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup;
if (names) { - for (i = 0; i < c_retval; i++) { + for (i = 0; i < c_retval; i++) PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - VIR_FREE(names[i]); - } - VIR_FREE(names); }
+ cleanup: + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); + VIR_FREE(names); + return py_retval; }
@@ -3579,28 +3569,24 @@ libvirt_virStoragePoolListVolumes(PyObject *self ATTRIBUTE_UNUSED, c_retval = virStoragePoolListVolumes(pool, names, c_retval); LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) { - VIR_FREE(names); - return VIR_PY_NONE; + py_retval = VIR_PY_NONE; + goto cleanup;
We're going to cleanup with c_retval == -1, right... and then doing the for loop to free names - could be a long time to complete. I do note that this differs from other prior uses in this patch - that is other functions will keep the VIR_FREE(names); return VIR_PY_NONE; if c_retval < 0 At this point it may be worthwhile for you to check *all* such goto's for c_retval && loops to free memory...
} } - py_retval = PyList_New(c_retval); - if (py_retval == NULL) { - if (names) { - for (i = 0; i < c_retval; i++) - VIR_FREE(names[i]); - VIR_FREE(names); - } - return NULL; - } + + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup;
if (names) { - for (i = 0; i < c_retval; i++) { + for (i = 0; i < c_retval; i++) PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - VIR_FREE(names[i]); - } - VIR_FREE(names); }
+ cleanup: + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); + VIR_FREE(names); + return py_retval; }
@@ -3850,9 +3836,10 @@ libvirt_virNodeListDevices(PyObject *self ATTRIBUTE_UNUSED, LIBVIRT_BEGIN_ALLOW_THREADS; c_retval = virNodeListDevices(conn, cap, names, c_retval, flags); LIBVIRT_END_ALLOW_THREADS; + if (c_retval < 0) { - VIR_FREE(names); - return VIR_PY_NONE; + py_retval = VIR_PY_NONE; + goto cleanup;
oh - look at that... here's a similar comment regarding c_retval as above.
} }
@@ -3947,8 +3934,8 @@ libvirt_virNodeDeviceListCaps(PyObject *self ATTRIBUTE_UNUSED, c_retval = virNodeDeviceListCaps(dev, names, c_retval); LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) { - VIR_FREE(names); - return VIR_PY_NONE; + py_retval = VIR_PY_NONE; + goto cleanup;
again
} }
@@ -4072,8 +4059,8 @@ libvirt_virConnectListSecrets(PyObject *self ATTRIBUTE_UNUSED, c_retval = virConnectListSecrets(conn, uuids, c_retval); LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) { - VIR_FREE(uuids); - return VIR_PY_NONE; + py_retval = VIR_PY_NONE; + goto cleanup;
again
} }
@@ -4404,24 +4391,19 @@ libvirt_virConnectListInterfaces(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE; } }
This one doesn't...
- py_retval = PyList_New(c_retval); - if (py_retval == NULL) { - if (names) { - for (i = 0; i < c_retval; i++) - VIR_FREE(names[i]); - VIR_FREE(names); - } - return NULL; - } + + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup;
if (names) { - for (i = 0; i < c_retval; i++) { + for (i = 0; i < c_retval; i++) PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - VIR_FREE(names[i]); - } - VIR_FREE(names); }
+ cleanup: + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); + VIR_FREE(names); return py_retval; }
@@ -4461,24 +4443,19 @@ libvirt_virConnectListDefinedInterfaces(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE; } } - py_retval = PyList_New(c_retval); - if (py_retval == NULL) { - if (names) { - for (i = 0; i < c_retval; i++) - VIR_FREE(names[i]); - VIR_FREE(names); - } - return NULL; - } + + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup;
if (names) { - for (i = 0; i < c_retval; i++) { + for (i = 0; i < c_retval; i++) PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - VIR_FREE(names[i]); - } - VIR_FREE(names); }
+ cleanup: + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); + VIR_FREE(names); return py_retval; }
@@ -8459,17 +8436,19 @@ libvirt_virDomainGetFSInfo(PyObject *self ATTRIBUTE_UNUSED,
/* convert to a Python list */ if ((py_retval = PyList_New(c_retval)) == NULL) - goto cleanup; + goto error;
for (i = 0; i < c_retval; i++) { virDomainFSInfoPtr fs = fsinfo[i]; PyObject *info, *alias;
if (fs == NULL) - goto cleanup; + goto error; + info = PyTuple_New(4); if (info == NULL) - goto cleanup; + goto error; + PyList_SetItem(py_retval, i, info);
PyTuple_SetItem(info, 0, libvirt_constcharPtrWrap(fs->mountpoint)); @@ -8478,27 +8457,25 @@ libvirt_virDomainGetFSInfo(PyObject *self ATTRIBUTE_UNUSED,
alias = PyList_New(0); if (alias == NULL) - goto cleanup; + goto error;
PyTuple_SetItem(info, 3, alias);
for (j = 0; j < fs->ndevAlias; j++) if (PyList_Append(alias, libvirt_constcharPtrWrap(fs->devAlias[j])) < 0) - goto cleanup; + goto error; }
Perhaps this one was pre-existing, but if c_retval < 0, this isn't going to go well... or it won't be quick! John
+ cleanup: for (i = 0; i < c_retval; i++) virDomainFSInfoFree(fsinfo[i]); VIR_FREE(fsinfo); return py_retval;
- cleanup: - for (i = 0; i < c_retval; i++) - virDomainFSInfoFree(fsinfo[i]); - VIR_FREE(fsinfo); - Py_XDECREF(py_retval); - return NULL; + error: + Py_CLEAR(py_retval); + goto cleanup; }
#endif /* LIBVIR_CHECK_VERSION(1, 2, 11) */

On Sat, Sep 26, 2015 at 10:14:37AM -0400, John Ferlan wrote:
On 09/24/2015 10:01 AM, Pavel Hrdina wrote:
This removes several code duplicates and also some unusual code structures.
Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 159 +++++++++++++++++++++++------------------------------ 1 file changed, 68 insertions(+), 91 deletions(-)
diff --git a/libvirt-override.c b/libvirt-override.c index 8afe7d7..205f0dd 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -439,13 +439,13 @@ libvirt_virDomainGetSchedulerType(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE;
/* convert to a Python tuple of long objects */ - if ((info = PyTuple_New(2)) == NULL) { - VIR_FREE(c_retval); - return NULL; - } + if ((info = PyTuple_New(2)) == NULL) + goto cleanup;
PyTuple_SetItem(info, 0, libvirt_constcharPtrWrap(c_retval)); PyTuple_SetItem(info, 1, libvirt_intWrap((long)nparams)); + + cleanup: VIR_FREE(c_retval); return info; } @@ -2401,7 +2401,6 @@ libvirt_virDomainSnapshotListNames(PyObject *self ATTRIBUTE_UNUSED, Py_CLEAR(py_retval); goto cleanup; } - VIR_FREE(names[i]); }
cleanup: @@ -3245,8 +3244,8 @@ libvirt_virNodeGetCellsFreeMemory(PyObject *self ATTRIBUTE_UNUSED, LIBVIRT_END_ALLOW_THREADS;
if (c_retval < 0) { - VIR_FREE(freeMems); - return VIR_PY_NONE; + py_retval = VIR_PY_NONE; + goto cleanup; }
if ((py_retval = PyList_New(c_retval)) == NULL) @@ -3425,24 +3424,19 @@ libvirt_virConnectListStoragePools(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE; } } - py_retval = PyList_New(c_retval); - if (py_retval == NULL) { - if (names) { - for (i = 0; i < c_retval; i++) - VIR_FREE(names[i]); - VIR_FREE(names); - } - return NULL; - } + + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup;
if (names) { - for (i = 0; i < c_retval; i++) { + for (i = 0; i < c_retval; i++) PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - VIR_FREE(names[i]); - } - VIR_FREE(names); }
+ cleanup: + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); + VIR_FREE(names); return py_retval; }
@@ -3480,24 +3474,20 @@ libvirt_virConnectListDefinedStoragePools(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE; } } - py_retval = PyList_New(c_retval); - if (py_retval == NULL) { - if (names) { - for (i = 0; i < c_retval; i++) - VIR_FREE(names[i]); - VIR_FREE(names); - } - return NULL; - } + + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup;
if (names) { - for (i = 0; i < c_retval; i++) { + for (i = 0; i < c_retval; i++) PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - VIR_FREE(names[i]); - } - VIR_FREE(names); }
+ cleanup: + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); + VIR_FREE(names); + return py_retval; }
@@ -3579,28 +3569,24 @@ libvirt_virStoragePoolListVolumes(PyObject *self ATTRIBUTE_UNUSED, c_retval = virStoragePoolListVolumes(pool, names, c_retval); LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) { - VIR_FREE(names); - return VIR_PY_NONE; + py_retval = VIR_PY_NONE; + goto cleanup;
We're going to cleanup with c_retval == -1, right... and then doing the for loop to free names - could be a long time to complete.
I do note that this differs from other prior uses in this patch - that is other functions will keep the VIR_FREE(names); return VIR_PY_NONE; if c_retval < 0
At this point it may be worthwhile for you to check *all* such goto's for c_retval && loops to free memory...
Oh, I didn't realize this, because some functions have 'int i;' and others have 'size_t i'. I've verified the 'i' declaration only in function with int and conclude it's ok to use it this way. This needs to be fixed, I'll send a v2. Pavel
} } - py_retval = PyList_New(c_retval); - if (py_retval == NULL) { - if (names) { - for (i = 0; i < c_retval; i++) - VIR_FREE(names[i]); - VIR_FREE(names); - } - return NULL; - } + + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup;
if (names) { - for (i = 0; i < c_retval; i++) { + for (i = 0; i < c_retval; i++) PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - VIR_FREE(names[i]); - } - VIR_FREE(names); }
+ cleanup: + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); + VIR_FREE(names); + return py_retval; }
@@ -3850,9 +3836,10 @@ libvirt_virNodeListDevices(PyObject *self ATTRIBUTE_UNUSED, LIBVIRT_BEGIN_ALLOW_THREADS; c_retval = virNodeListDevices(conn, cap, names, c_retval, flags); LIBVIRT_END_ALLOW_THREADS; + if (c_retval < 0) { - VIR_FREE(names); - return VIR_PY_NONE; + py_retval = VIR_PY_NONE; + goto cleanup;
oh - look at that... here's a similar comment regarding c_retval as above.
} }
@@ -3947,8 +3934,8 @@ libvirt_virNodeDeviceListCaps(PyObject *self ATTRIBUTE_UNUSED, c_retval = virNodeDeviceListCaps(dev, names, c_retval); LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) { - VIR_FREE(names); - return VIR_PY_NONE; + py_retval = VIR_PY_NONE; + goto cleanup;
again
} }
@@ -4072,8 +4059,8 @@ libvirt_virConnectListSecrets(PyObject *self ATTRIBUTE_UNUSED, c_retval = virConnectListSecrets(conn, uuids, c_retval); LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) { - VIR_FREE(uuids); - return VIR_PY_NONE; + py_retval = VIR_PY_NONE; + goto cleanup;
again
} }
@@ -4404,24 +4391,19 @@ libvirt_virConnectListInterfaces(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE; } }
This one doesn't...
- py_retval = PyList_New(c_retval); - if (py_retval == NULL) { - if (names) { - for (i = 0; i < c_retval; i++) - VIR_FREE(names[i]); - VIR_FREE(names); - } - return NULL; - } + + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup;
if (names) { - for (i = 0; i < c_retval; i++) { + for (i = 0; i < c_retval; i++) PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - VIR_FREE(names[i]); - } - VIR_FREE(names); }
+ cleanup: + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); + VIR_FREE(names); return py_retval; }
@@ -4461,24 +4443,19 @@ libvirt_virConnectListDefinedInterfaces(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE; } } - py_retval = PyList_New(c_retval); - if (py_retval == NULL) { - if (names) { - for (i = 0; i < c_retval; i++) - VIR_FREE(names[i]); - VIR_FREE(names); - } - return NULL; - } + + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup;
if (names) { - for (i = 0; i < c_retval; i++) { + for (i = 0; i < c_retval; i++) PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - VIR_FREE(names[i]); - } - VIR_FREE(names); }
+ cleanup: + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); + VIR_FREE(names); return py_retval; }
@@ -8459,17 +8436,19 @@ libvirt_virDomainGetFSInfo(PyObject *self ATTRIBUTE_UNUSED,
/* convert to a Python list */ if ((py_retval = PyList_New(c_retval)) == NULL) - goto cleanup; + goto error;
for (i = 0; i < c_retval; i++) { virDomainFSInfoPtr fs = fsinfo[i]; PyObject *info, *alias;
if (fs == NULL) - goto cleanup; + goto error; + info = PyTuple_New(4); if (info == NULL) - goto cleanup; + goto error; + PyList_SetItem(py_retval, i, info);
PyTuple_SetItem(info, 0, libvirt_constcharPtrWrap(fs->mountpoint)); @@ -8478,27 +8457,25 @@ libvirt_virDomainGetFSInfo(PyObject *self ATTRIBUTE_UNUSED,
alias = PyList_New(0); if (alias == NULL) - goto cleanup; + goto error;
PyTuple_SetItem(info, 3, alias);
for (j = 0; j < fs->ndevAlias; j++) if (PyList_Append(alias, libvirt_constcharPtrWrap(fs->devAlias[j])) < 0) - goto cleanup; + goto error; }
Perhaps this one was pre-existing, but if c_retval < 0, this isn't going to go well... or it won't be quick!
John
+ cleanup: for (i = 0; i < c_retval; i++) virDomainFSInfoFree(fsinfo[i]); VIR_FREE(fsinfo); return py_retval;
- cleanup: - for (i = 0; i < c_retval; i++) - virDomainFSInfoFree(fsinfo[i]); - VIR_FREE(fsinfo); - Py_XDECREF(py_retval); - return NULL; + error: + Py_CLEAR(py_retval); + goto cleanup; }
#endif /* LIBVIR_CHECK_VERSION(1, 2, 11) */

This removes several code duplicates and also some unusual code structures. Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 264 +++++++++++++++++++++++++---------------------------- 1 file changed, 126 insertions(+), 138 deletions(-) diff --git a/libvirt-override.c b/libvirt-override.c index 344f211..2fc180c 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -440,13 +440,13 @@ libvirt_virDomainGetSchedulerType(PyObject *self ATTRIBUTE_UNUSED, return VIR_PY_NONE; /* convert to a Python tuple of long objects */ - if ((info = PyTuple_New(2)) == NULL) { - VIR_FREE(c_retval); - return NULL; - } + if ((info = PyTuple_New(2)) == NULL) + goto cleanup; PyTuple_SetItem(info, 0, libvirt_constcharPtrWrap(c_retval)); PyTuple_SetItem(info, 1, libvirt_intWrap((long)nparams)); + + cleanup: VIR_FREE(c_retval); return info; } @@ -2240,8 +2240,8 @@ libvirt_virConnectListDomainsID(PyObject *self ATTRIBUTE_UNUSED, c_retval = virConnectListDomains(conn, ids, c_retval); LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) { - VIR_FREE(ids); - return VIR_PY_NONE; + py_retval = VIR_PY_NONE; + goto cleanup; } } @@ -2335,8 +2335,8 @@ libvirt_virConnectListDefinedDomains(PyObject *self ATTRIBUTE_UNUSED, c_retval = virConnectListDefinedDomains(conn, names, c_retval); LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) { - VIR_FREE(names); - return VIR_PY_NONE; + py_retval = VIR_PY_NONE; + goto cleanup; } } @@ -2349,8 +2349,9 @@ libvirt_virConnectListDefinedDomains(PyObject *self ATTRIBUTE_UNUSED, } cleanup: - for (i = 0; i < c_retval; i++) - VIR_FREE(names[i]); + if (c_retval > 0) + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); VIR_FREE(names); return py_retval; } @@ -2386,8 +2387,8 @@ libvirt_virDomainSnapshotListNames(PyObject *self ATTRIBUTE_UNUSED, c_retval = virDomainSnapshotListNames(dom, names, c_retval, flags); LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) { - VIR_FREE(names); - return VIR_PY_NONE; + py_retval = VIR_PY_NONE; + goto cleanup; } } py_retval = PyList_New(c_retval); @@ -2401,12 +2402,12 @@ libvirt_virDomainSnapshotListNames(PyObject *self ATTRIBUTE_UNUSED, Py_CLEAR(py_retval); goto cleanup; } - VIR_FREE(names[i]); } cleanup: - for (i = 0; i < c_retval; i++) - VIR_FREE(names[i]); + if (c_retval > 0) + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); VIR_FREE(names); return py_retval; } @@ -2489,8 +2490,8 @@ libvirt_virDomainSnapshotListChildrenNames(PyObject *self ATTRIBUTE_UNUSED, flags); LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) { - VIR_FREE(names); - return VIR_PY_NONE; + py_retval = VIR_PY_NONE; + goto cleanup; } } @@ -2508,8 +2509,9 @@ libvirt_virDomainSnapshotListChildrenNames(PyObject *self ATTRIBUTE_UNUSED, } cleanup: - for (i = 0; i < c_retval; i++) - VIR_FREE(names[i]); + if (c_retval > 0) + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); VIR_FREE(names); return py_retval; } @@ -2972,8 +2974,8 @@ libvirt_virConnectListNetworks(PyObject *self ATTRIBUTE_UNUSED, c_retval = virConnectListNetworks(conn, names, c_retval); LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) { - VIR_FREE(names); - return VIR_PY_NONE; + py_retval = VIR_PY_NONE; + goto cleanup; } } @@ -2986,8 +2988,9 @@ libvirt_virConnectListNetworks(PyObject *self ATTRIBUTE_UNUSED, } cleanup: - for (i = 0; i < c_retval; i++) - VIR_FREE(names[i]); + if (c_retval > 0) + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); VIR_FREE(names); return py_retval; } @@ -3023,8 +3026,8 @@ libvirt_virConnectListDefinedNetworks(PyObject *self ATTRIBUTE_UNUSED, c_retval = virConnectListDefinedNetworks(conn, names, c_retval); LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) { - VIR_FREE(names); - return VIR_PY_NONE; + py_retval = VIR_PY_NONE; + goto cleanup; } } @@ -3037,8 +3040,9 @@ libvirt_virConnectListDefinedNetworks(PyObject *self ATTRIBUTE_UNUSED, } cleanup: - for (i = 0; i < c_retval; i++) - VIR_FREE(names[i]); + if (c_retval > 0) + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); VIR_FREE(names); return py_retval; } @@ -3245,8 +3249,8 @@ libvirt_virNodeGetCellsFreeMemory(PyObject *self ATTRIBUTE_UNUSED, LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) { - VIR_FREE(freeMems); - return VIR_PY_NONE; + py_retval = VIR_PY_NONE; + goto cleanup; } if ((py_retval = PyList_New(c_retval)) == NULL) @@ -3421,28 +3425,24 @@ libvirt_virConnectListStoragePools(PyObject *self ATTRIBUTE_UNUSED, c_retval = virConnectListStoragePools(conn, names, c_retval); LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) { - VIR_FREE(names); - return VIR_PY_NONE; - } - } - py_retval = PyList_New(c_retval); - if (py_retval == NULL) { - if (names) { - for (i = 0; i < c_retval; i++) - VIR_FREE(names[i]); - VIR_FREE(names); + py_retval = VIR_PY_NONE; + goto cleanup; } - return NULL; } + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup; + if (names) { - for (i = 0; i < c_retval; i++) { + for (i = 0; i < c_retval; i++) PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - VIR_FREE(names[i]); - } - VIR_FREE(names); } + cleanup: + if (c_retval > 0) + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); + VIR_FREE(names); return py_retval; } @@ -3476,28 +3476,24 @@ libvirt_virConnectListDefinedStoragePools(PyObject *self ATTRIBUTE_UNUSED, c_retval = virConnectListDefinedStoragePools(conn, names, c_retval); LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) { - VIR_FREE(names); - return VIR_PY_NONE; - } - } - py_retval = PyList_New(c_retval); - if (py_retval == NULL) { - if (names) { - for (i = 0; i < c_retval; i++) - VIR_FREE(names[i]); - VIR_FREE(names); + py_retval = VIR_PY_NONE; + goto cleanup; } - return NULL; } + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup; + if (names) { - for (i = 0; i < c_retval; i++) { + for (i = 0; i < c_retval; i++) PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - VIR_FREE(names[i]); - } - VIR_FREE(names); } + cleanup: + if (c_retval > 0) + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); + VIR_FREE(names); return py_retval; } @@ -3579,28 +3575,24 @@ libvirt_virStoragePoolListVolumes(PyObject *self ATTRIBUTE_UNUSED, c_retval = virStoragePoolListVolumes(pool, names, c_retval); LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) { - VIR_FREE(names); - return VIR_PY_NONE; - } - } - py_retval = PyList_New(c_retval); - if (py_retval == NULL) { - if (names) { - for (i = 0; i < c_retval; i++) - VIR_FREE(names[i]); - VIR_FREE(names); + py_retval = VIR_PY_NONE; + goto cleanup; } - return NULL; } + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup; + if (names) { - for (i = 0; i < c_retval; i++) { + for (i = 0; i < c_retval; i++) PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - VIR_FREE(names[i]); - } - VIR_FREE(names); } + cleanup: + if (c_retval > 0) + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); + VIR_FREE(names); return py_retval; } @@ -3850,9 +3842,10 @@ libvirt_virNodeListDevices(PyObject *self ATTRIBUTE_UNUSED, LIBVIRT_BEGIN_ALLOW_THREADS; c_retval = virNodeListDevices(conn, cap, names, c_retval, flags); LIBVIRT_END_ALLOW_THREADS; + if (c_retval < 0) { - VIR_FREE(names); - return VIR_PY_NONE; + py_retval = VIR_PY_NONE; + goto cleanup; } } @@ -3865,8 +3858,9 @@ libvirt_virNodeListDevices(PyObject *self ATTRIBUTE_UNUSED, } cleanup: - for (i = 0; i < c_retval; i++) - VIR_FREE(names[i]); + if (c_retval > 0) + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); VIR_FREE(names); return py_retval; } @@ -3947,8 +3941,8 @@ libvirt_virNodeDeviceListCaps(PyObject *self ATTRIBUTE_UNUSED, c_retval = virNodeDeviceListCaps(dev, names, c_retval); LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) { - VIR_FREE(names); - return VIR_PY_NONE; + py_retval = VIR_PY_NONE; + goto cleanup; } } @@ -3961,8 +3955,9 @@ libvirt_virNodeDeviceListCaps(PyObject *self ATTRIBUTE_UNUSED, } cleanup: - for (i = 0; i < c_retval; i++) - VIR_FREE(names[i]); + if (c_retval > 0) + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); VIR_FREE(names); return py_retval; } @@ -4072,8 +4067,8 @@ libvirt_virConnectListSecrets(PyObject *self ATTRIBUTE_UNUSED, c_retval = virConnectListSecrets(conn, uuids, c_retval); LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) { - VIR_FREE(uuids); - return VIR_PY_NONE; + py_retval = VIR_PY_NONE; + goto cleanup; } } @@ -4086,8 +4081,9 @@ libvirt_virConnectListSecrets(PyObject *self ATTRIBUTE_UNUSED, } cleanup: - for (i = 0; i < c_retval; i++) - VIR_FREE(uuids[i]); + if (c_retval > 0) + for (i = 0; i < c_retval; i++) + VIR_FREE(uuids[i]); VIR_FREE(uuids); return py_retval; } @@ -4301,8 +4297,8 @@ libvirt_virConnectListNWFilters(PyObject *self ATTRIBUTE_UNUSED, c_retval = virConnectListNWFilters(conn, uuids, c_retval); LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) { - VIR_FREE(uuids); - return VIR_PY_NONE; + py_retval = VIR_PY_NONE; + goto cleanup; } } @@ -4315,8 +4311,9 @@ libvirt_virConnectListNWFilters(PyObject *self ATTRIBUTE_UNUSED, } cleanup: - for (i = 0; i < c_retval; i++) - VIR_FREE(uuids[i]); + if (c_retval > 0) + for (i = 0; i < c_retval; i++) + VIR_FREE(uuids[i]); VIR_FREE(uuids); return py_retval; } @@ -4400,28 +4397,24 @@ libvirt_virConnectListInterfaces(PyObject *self ATTRIBUTE_UNUSED, c_retval = virConnectListInterfaces(conn, names, c_retval); LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) { - VIR_FREE(names); - return VIR_PY_NONE; - } - } - py_retval = PyList_New(c_retval); - if (py_retval == NULL) { - if (names) { - for (i = 0; i < c_retval; i++) - VIR_FREE(names[i]); - VIR_FREE(names); + py_retval = VIR_PY_NONE; + goto cleanup; } - return NULL; } + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup; + if (names) { - for (i = 0; i < c_retval; i++) { + for (i = 0; i < c_retval; i++) PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - VIR_FREE(names[i]); - } - VIR_FREE(names); } + cleanup: + if (c_retval > 0) + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); + VIR_FREE(names); return py_retval; } @@ -4457,28 +4450,24 @@ libvirt_virConnectListDefinedInterfaces(PyObject *self ATTRIBUTE_UNUSED, c_retval = virConnectListDefinedInterfaces(conn, names, c_retval); LIBVIRT_END_ALLOW_THREADS; if (c_retval < 0) { - VIR_FREE(names); - return VIR_PY_NONE; - } - } - py_retval = PyList_New(c_retval); - if (py_retval == NULL) { - if (names) { - for (i = 0; i < c_retval; i++) - VIR_FREE(names[i]); - VIR_FREE(names); + py_retval = VIR_PY_NONE; + goto cleanup; } - return NULL; } + if ((py_retval = PyList_New(c_retval)) == NULL) + goto cleanup; + if (names) { - for (i = 0; i < c_retval; i++) { + for (i = 0; i < c_retval; i++) PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - VIR_FREE(names[i]); - } - VIR_FREE(names); } + cleanup: + if (c_retval > 0) + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); + VIR_FREE(names); return py_retval; } @@ -4894,11 +4883,10 @@ libvirt_virDomainGetDiskErrors(PyObject *self ATTRIBUTE_UNUSED, } cleanup: - if (disks) { + if (count > 0) for (i = 0; i < count; i++) VIR_FREE(disks[i].disk); - VIR_FREE(disks); - } + VIR_FREE(disks); return py_retval; } @@ -8186,10 +8174,9 @@ libvirt_virNetworkGetDHCPLeases(PyObject *self ATTRIBUTE_UNUSED, } cleanup: - if (leases) { + if (leases_count > 0) for (i = 0; i < leases_count; i++) virNetworkDHCPLeaseFree(leases[i]); - } VIR_FREE(leases); return py_retval; @@ -8458,17 +8445,19 @@ libvirt_virDomainGetFSInfo(PyObject *self ATTRIBUTE_UNUSED, /* convert to a Python list */ if ((py_retval = PyList_New(c_retval)) == NULL) - goto cleanup; + goto error; for (i = 0; i < c_retval; i++) { virDomainFSInfoPtr fs = fsinfo[i]; PyObject *info, *alias; if (fs == NULL) - goto cleanup; + goto error; + info = PyTuple_New(4); if (info == NULL) - goto cleanup; + goto error; + PyList_SetItem(py_retval, i, info); PyTuple_SetItem(info, 0, libvirt_constcharPtrWrap(fs->mountpoint)); @@ -8477,27 +8466,26 @@ libvirt_virDomainGetFSInfo(PyObject *self ATTRIBUTE_UNUSED, alias = PyList_New(0); if (alias == NULL) - goto cleanup; + goto error; PyTuple_SetItem(info, 3, alias); for (j = 0; j < fs->ndevAlias; j++) if (PyList_Append(alias, libvirt_constcharPtrWrap(fs->devAlias[j])) < 0) - goto cleanup; + goto error; } - for (i = 0; i < c_retval; i++) - virDomainFSInfoFree(fsinfo[i]); + cleanup: + if (c_retval > 0) + for (i = 0; i < c_retval; i++) + virDomainFSInfoFree(fsinfo[i]); VIR_FREE(fsinfo); return py_retval; - cleanup: - for (i = 0; i < c_retval; i++) - virDomainFSInfoFree(fsinfo[i]); - VIR_FREE(fsinfo); - Py_XDECREF(py_retval); - return NULL; + error: + Py_CLEAR(py_retval); + goto cleanup; } #endif /* LIBVIR_CHECK_VERSION(1, 2, 11) */ -- 2.6.0

On 10/05/2015 03:57 AM, Pavel Hrdina wrote:
This removes several code duplicates and also some unusual code structures.
Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 264 +++++++++++++++++++++++++---------------------------- 1 file changed, 126 insertions(+), 138 deletions(-)
ACK - I viewed diffs only - no git am. Hopefully my eyes didn't glaze over something. BTW: The consumer I'd be more concerned with is not virt-manager/install tools, rather RHEV type tools. If it's possible to get this to run through a virt-test or avacado test run prior to final push that may be worthwhile for your sanity. If not possible, at least we have a few weeks to clean things up before next release cut! John

Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-utils.h | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) diff --git a/libvirt-utils.h b/libvirt-utils.h index 9f80133..f74654c 100644 --- a/libvirt-utils.h +++ b/libvirt-utils.h @@ -155,6 +155,88 @@ void virFree(void *ptrptr) ATTRIBUTE_NONNULL(1); /** + * VIR_PY_TUPLE_SET_GOTO: + * @TUPLE: a pointer to a tuple object + * @INDEX: a position in the tuple object + * @VALUE: a pointer to a python object to add into the tuple + * @GOTO: a label to jump to in case of error + * + * Add the new value to specific place into the python tuple object. In case of + * error it will jump to provided label and DECREF the value to not leak memory. + */ +#define VIR_PY_TUPLE_SET_GOTO(TUPLE, INDEX, VALUE, GOTO) \ + do { \ + PyObject *tmpVal = VALUE; \ + if (!tmpVal || PyTuple_SetItem(TUPLE, INDEX, tmpVal) < 0) \ + goto GOTO; \ + } while (0) + + +/** + * VIR_PY_LIST_SET_GOTO: + * @LIST: a pointer to a list object + * @INDEX: a position in the list object + * @VALUE: a pointer to a python object to add into the list + * @GOTO: a label to jump to in case of error + * + * Add the new value to specific place into the python list object. In case of + * error it will jump to provided label and DECREF the value to not leak memory. + */ +#define VIR_PY_LIST_SET_GOTO(LIST, INDEX, VALUE, GOTO) \ + do { \ + PyObject *tmpVal = VALUE; \ + if (!tmpVal || PyList_SetItem(LIST, INDEX, tmpVal) < 0) \ + goto GOTO; \ + } while (0) + + +/** + * VIR_PY_LIST_APPEND_GOTO: + * @LIST: a pointer to a python list object + * @VALUE: a pointer to a python object to add into the list + * @GOTO: a label to jump to in case of error + * + * Append the new value into the end of the python list object. In case of + * error it will jump to provided label and DECREF the value to not leak memory. + */ +#define VIR_PY_LIST_APPEND_GOTO(LIST, VALUE, GOTO) \ + do { \ + PyObject *tmpVal = VALUE; \ + if (!tmpVal || PyList_Append(LIST, tmpVal) < 0) { \ + Py_XDECREF(tmpVal); \ + goto GOTO; \ + } \ + Py_DECREF(tmpVal); \ + } while (0) + + +/** + * VIR_PY_DICT_SET_GOTO: + * @DICT: a pointer to a python dict object + * @KEY: a pointer to a python string object which will be used as a key + * @VALUE: a pointer to a python object to add into the dict under provided key + * @GOTO: a label to jump to in case of error + * + * Add a new pair of key:value into the python dict object. In case of error it + * will jump to provided label. It will DECREF both key and value in case of + * success or error. + */ +#define VIR_PY_DICT_SET_GOTO(DICT, KEY, VALUE, GOTO) \ + do { \ + PyObject *tmpKey = KEY; \ + PyObject *tmpVal = VALUE; \ + if (!tmpKey || !tmpVal || \ + PyDict_SetItem(DICT, tmpKey, tmpVal) < 0) { \ + Py_XDECREF(tmpKey); \ + Py_XDECREF(tmpVal); \ + goto GOTO; \ + } \ + Py_DECREF(tmpKey); \ + Py_DECREF(tmpVal); \ + } while (0) + + +/** * VIR_ALLOC: * @ptr: pointer to hold address of allocated memory * -- 2.5.3

Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 304 +++++++++++++++++++++++++++-------------------------- 1 file changed, 155 insertions(+), 149 deletions(-) diff --git a/libvirt-override.c b/libvirt-override.c index 205f0dd..c2e9fb9 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -116,12 +116,17 @@ libvirt_virDomainBlockStats(PyObject *self ATTRIBUTE_UNUSED, if ((info = PyTuple_New(5)) == NULL) return NULL; - PyTuple_SetItem(info, 0, libvirt_longlongWrap(stats.rd_req)); - PyTuple_SetItem(info, 1, libvirt_longlongWrap(stats.rd_bytes)); - PyTuple_SetItem(info, 2, libvirt_longlongWrap(stats.wr_req)); - PyTuple_SetItem(info, 3, libvirt_longlongWrap(stats.wr_bytes)); - PyTuple_SetItem(info, 4, libvirt_longlongWrap(stats.errs)); + VIR_PY_TUPLE_SET_GOTO(info, 0, libvirt_longlongWrap(stats.rd_req), error); + VIR_PY_TUPLE_SET_GOTO(info, 1, libvirt_longlongWrap(stats.rd_bytes), error); + VIR_PY_TUPLE_SET_GOTO(info, 2, libvirt_longlongWrap(stats.wr_req), error); + VIR_PY_TUPLE_SET_GOTO(info, 3, libvirt_longlongWrap(stats.wr_bytes), error); + VIR_PY_TUPLE_SET_GOTO(info, 4, libvirt_longlongWrap(stats.errs), error); + return info; + +error: + Py_DECREF(info); + return NULL; } static PyObject * @@ -337,15 +342,20 @@ libvirt_virDomainInterfaceStats(PyObject *self ATTRIBUTE_UNUSED, if ((info = PyTuple_New(8)) == NULL) return NULL; - PyTuple_SetItem(info, 0, libvirt_longlongWrap(stats.rx_bytes)); - PyTuple_SetItem(info, 1, libvirt_longlongWrap(stats.rx_packets)); - PyTuple_SetItem(info, 2, libvirt_longlongWrap(stats.rx_errs)); - PyTuple_SetItem(info, 3, libvirt_longlongWrap(stats.rx_drop)); - PyTuple_SetItem(info, 4, libvirt_longlongWrap(stats.tx_bytes)); - PyTuple_SetItem(info, 5, libvirt_longlongWrap(stats.tx_packets)); - PyTuple_SetItem(info, 6, libvirt_longlongWrap(stats.tx_errs)); - PyTuple_SetItem(info, 7, libvirt_longlongWrap(stats.tx_drop)); + VIR_PY_TUPLE_SET_GOTO(info, 0, libvirt_longlongWrap(stats.rx_bytes), error); + VIR_PY_TUPLE_SET_GOTO(info, 1, libvirt_longlongWrap(stats.rx_packets), error); + VIR_PY_TUPLE_SET_GOTO(info, 2, libvirt_longlongWrap(stats.rx_errs), error); + VIR_PY_TUPLE_SET_GOTO(info, 3, libvirt_longlongWrap(stats.rx_drop), error); + VIR_PY_TUPLE_SET_GOTO(info, 4, libvirt_longlongWrap(stats.tx_bytes), error); + VIR_PY_TUPLE_SET_GOTO(info, 5, libvirt_longlongWrap(stats.tx_packets), error); + VIR_PY_TUPLE_SET_GOTO(info, 6, libvirt_longlongWrap(stats.tx_errs), error); + VIR_PY_TUPLE_SET_GOTO(info, 7, libvirt_longlongWrap(stats.tx_drop), error); + return info; + + error: + Py_DECREF(info); + return NULL; } static PyObject * @@ -442,12 +452,17 @@ libvirt_virDomainGetSchedulerType(PyObject *self ATTRIBUTE_UNUSED, if ((info = PyTuple_New(2)) == NULL) goto cleanup; - PyTuple_SetItem(info, 0, libvirt_constcharPtrWrap(c_retval)); - PyTuple_SetItem(info, 1, libvirt_intWrap((long)nparams)); + VIR_PY_TUPLE_SET_GOTO(info, 0, libvirt_constcharPtrWrap(c_retval), error); + VIR_PY_TUPLE_SET_GOTO(info, 1, libvirt_intWrap((long)nparams), error); cleanup: VIR_FREE(c_retval); return info; + + error: + Py_CLEAR(info); + goto cleanup; + } static PyObject * @@ -1239,18 +1254,15 @@ libvirt_virDomainGetVcpus(PyObject *self ATTRIBUTE_UNUSED, if ((pycpuinfo = PyList_New(dominfo.nrVirtCpu)) == NULL) goto cleanup; - if (PyTuple_SetItem(pyretval, 0, pycpuinfo) < 0) - goto cleanup; + VIR_PY_TUPLE_SET_GOTO(pyretval, 0, pycpuinfo, cleanup); if ((pycpumap = PyList_New(dominfo.nrVirtCpu)) == NULL) goto cleanup; - if (PyTuple_SetItem(pyretval, 1, pycpumap) < 0) - goto cleanup; + VIR_PY_TUPLE_SET_GOTO(pyretval, 1, pycpumap, cleanup); for (i = 0; i < dominfo.nrVirtCpu; i++) { PyObject *info = PyTuple_New(4); - PyObject *item = NULL; if (info == NULL) goto cleanup; @@ -1258,21 +1270,15 @@ libvirt_virDomainGetVcpus(PyObject *self ATTRIBUTE_UNUSED, if (PyList_SetItem(pycpuinfo, i, info) < 0) goto cleanup; - if ((item = libvirt_intWrap((long)cpuinfo[i].number)) == NULL || - PyTuple_SetItem(info, 0, item) < 0) - goto cleanup; - - if ((item = libvirt_intWrap((long)cpuinfo[i].state)) == NULL || - PyTuple_SetItem(info, 1, item) < 0) - goto cleanup; - - if ((item = libvirt_ulonglongWrap(cpuinfo[i].cpuTime)) == NULL || - PyTuple_SetItem(info, 2, item) < 0) - goto cleanup; - - if ((item = libvirt_intWrap((long)cpuinfo[i].cpu)) == NULL || - PyTuple_SetItem(info, 3, item) < 0) - goto cleanup; + VIR_PY_TUPLE_SET_GOTO(info, 0, libvirt_intWrap((long)cpuinfo[i].number), + cleanup); + VIR_PY_TUPLE_SET_GOTO(info, 1, libvirt_intWrap((long)cpuinfo[i].state), + cleanup); + VIR_PY_TUPLE_SET_GOTO(info, 2, + libvirt_ulonglongWrap((long)cpuinfo[i].cpuTime), + cleanup); + VIR_PY_TUPLE_SET_GOTO(info, 3, libvirt_intWrap((long)cpuinfo[i].cpu), + cleanup); } for (i = 0; i < dominfo.nrVirtCpu; i++) { PyObject *info = PyTuple_New(cpunum); @@ -1284,11 +1290,11 @@ libvirt_virDomainGetVcpus(PyObject *self ATTRIBUTE_UNUSED, goto cleanup; for (j = 0; j < cpunum; j++) { - PyObject *item = NULL; - if ((item = PyBool_FromLong(VIR_CPU_USABLE(cpumap, cpumaplen, - i, j))) == NULL || - PyTuple_SetItem(info, j, item) < 0) - goto cleanup; + VIR_PY_TUPLE_SET_GOTO(info, j, + PyBool_FromLong(VIR_CPU_USABLE(cpumap, + cpumaplen, + i, j)), + cleanup); } } @@ -1485,9 +1491,13 @@ libvirt_virDomainGetVcpuPinInfo(PyObject *self ATTRIBUTE_UNUSED, PyList_SetItem(pycpumaps, vcpu, mapinfo); for (pcpu = 0; pcpu < cpunum; pcpu++) { - PyTuple_SetItem(mapinfo, pcpu, - PyBool_FromLong(VIR_CPU_USABLE(cpumaps, cpumaplen, - vcpu, pcpu))); + VIR_PY_TUPLE_SET_GOTO(mapinfo, + pcpu, + PyBool_FromLong(VIR_CPU_USABLE(cpumaps, + cpumaplen, + vcpu, + pcpu)), + cleanup); } } @@ -1611,13 +1621,23 @@ libvirt_virDomainGetEmulatorPinInfo(PyObject *self ATTRIBUTE_UNUSED, return NULL; } - for (pcpu = 0; pcpu < cpunum; pcpu++) - PyTuple_SET_ITEM(pycpumap, pcpu, - PyBool_FromLong(VIR_CPU_USABLE(cpumap, cpumaplen, - 0, pcpu))); + for (pcpu = 0; pcpu < cpunum; pcpu++) { + VIR_PY_TUPLE_SET_GOTO(pycpumap, + pcpu, + PyBool_FromLong(VIR_CPU_USABLE(cpumap, + cpumaplen, + 0, + pcpu)), + error); + } + cleanup: VIR_FREE(cpumap); return pycpumap; + + error: + Py_CLEAR(pycpumap); + goto cleanup; } #endif /* LIBVIR_CHECK_VERSION(0, 10, 0) */ @@ -1675,18 +1695,15 @@ libvirt_virDomainGetIOThreadInfo(PyObject *self ATTRIBUTE_UNUSED, } /* 0: IOThread ID */ - if ((iothrid = libvirt_uintWrap(iothr->iothread_id)) == NULL || - PyTuple_SetItem(iothrtpl, 0, iothrid) < 0) { - Py_XDECREF(iothrid); - goto cleanup; - } + VIR_PY_TUPLE_SET_GOTO(iothrtpl, 0, libvirt_uintWrap(iothr->iothread_id), + cleanup); /* 1: CPU map */ - if ((iothrmap = PyList_New(cpunum)) == NULL || - PyTuple_SetItem(iothrtpl, 1, iothrmap) < 0) { - Py_XDECREF(iothrmap); + if ((iothrmap = PyList_New(cpunum)) == NULL) goto cleanup; - } + + VIR_PY_TUPLE_SET_GOTO(iothrtpl, 1, iothrmap, cleanup); + for (pcpu = 0; pcpu < cpunum; pcpu++) { PyObject *pyused; if ((pyused = PyBool_FromLong(VIR_CPU_USED(iothr->cpumap, @@ -1801,17 +1818,21 @@ libvirt_virGetLastError(PyObject *self ATTRIBUTE_UNUSED, if ((info = PyTuple_New(9)) == NULL) return NULL; - PyTuple_SetItem(info, 0, libvirt_intWrap((long) err->code)); - PyTuple_SetItem(info, 1, libvirt_intWrap((long) err->domain)); - PyTuple_SetItem(info, 2, libvirt_constcharPtrWrap(err->message)); - PyTuple_SetItem(info, 3, libvirt_intWrap((long) err->level)); - PyTuple_SetItem(info, 4, libvirt_constcharPtrWrap(err->str1)); - PyTuple_SetItem(info, 5, libvirt_constcharPtrWrap(err->str2)); - PyTuple_SetItem(info, 6, libvirt_constcharPtrWrap(err->str3)); - PyTuple_SetItem(info, 7, libvirt_intWrap((long) err->int1)); - PyTuple_SetItem(info, 8, libvirt_intWrap((long) err->int2)); + VIR_PY_TUPLE_SET_GOTO(info, 0, libvirt_intWrap((long)err->code), error); + VIR_PY_TUPLE_SET_GOTO(info, 1, libvirt_intWrap((long)err->domain), error); + VIR_PY_TUPLE_SET_GOTO(info, 2, libvirt_constcharPtrWrap(err->message), error); + VIR_PY_TUPLE_SET_GOTO(info, 3, libvirt_intWrap((long)err->level), error); + VIR_PY_TUPLE_SET_GOTO(info, 4, libvirt_constcharPtrWrap(err->str1), error); + VIR_PY_TUPLE_SET_GOTO(info, 5, libvirt_constcharPtrWrap(err->str2), error); + VIR_PY_TUPLE_SET_GOTO(info, 6, libvirt_constcharPtrWrap(err->str3), error); + VIR_PY_TUPLE_SET_GOTO(info, 7, libvirt_intWrap((long)err->int1), error); + VIR_PY_TUPLE_SET_GOTO(info, 8, libvirt_intWrap((long)err->int2), error); return info; + + error: + Py_XDECREF(info); + return NULL; } static PyObject * @@ -1836,17 +1857,21 @@ libvirt_virConnGetLastError(PyObject *self ATTRIBUTE_UNUSED, if ((info = PyTuple_New(9)) == NULL) return NULL; - PyTuple_SetItem(info, 0, libvirt_intWrap((long) err->code)); - PyTuple_SetItem(info, 1, libvirt_intWrap((long) err->domain)); - PyTuple_SetItem(info, 2, libvirt_constcharPtrWrap(err->message)); - PyTuple_SetItem(info, 3, libvirt_intWrap((long) err->level)); - PyTuple_SetItem(info, 4, libvirt_constcharPtrWrap(err->str1)); - PyTuple_SetItem(info, 5, libvirt_constcharPtrWrap(err->str2)); - PyTuple_SetItem(info, 6, libvirt_constcharPtrWrap(err->str3)); - PyTuple_SetItem(info, 7, libvirt_intWrap((long) err->int1)); - PyTuple_SetItem(info, 8, libvirt_intWrap((long) err->int2)); + VIR_PY_TUPLE_SET_GOTO(info, 0, libvirt_intWrap((long)err->code), error); + VIR_PY_TUPLE_SET_GOTO(info, 1, libvirt_intWrap((long)err->domain), error); + VIR_PY_TUPLE_SET_GOTO(info, 2, libvirt_constcharPtrWrap(err->message), error); + VIR_PY_TUPLE_SET_GOTO(info, 3, libvirt_intWrap((long)err->level), error); + VIR_PY_TUPLE_SET_GOTO(info, 4, libvirt_constcharPtrWrap(err->str1), error); + VIR_PY_TUPLE_SET_GOTO(info, 5, libvirt_constcharPtrWrap(err->str2), error); + VIR_PY_TUPLE_SET_GOTO(info, 6, libvirt_constcharPtrWrap(err->str3), error); + VIR_PY_TUPLE_SET_GOTO(info, 7, libvirt_intWrap((long)err->int1), error); + VIR_PY_TUPLE_SET_GOTO(info, 8, libvirt_intWrap((long)err->int2), error); return info; + + error: + Py_XDECREF(info); + return NULL; } static void @@ -1872,22 +1897,23 @@ libvirt_virErrorFuncHandler(ATTRIBUTE_UNUSED void *ctx, goto cleanup; Py_XINCREF(libvirt_virPythonErrorFuncCtxt); - PyTuple_SetItem(list, 0, libvirt_virPythonErrorFuncCtxt); + VIR_PY_TUPLE_SET_GOTO(list, 0, libvirt_virPythonErrorFuncCtxt, cleanup); if ((info = PyTuple_New(9)) == NULL) goto cleanup; - PyTuple_SetItem(list, 1, info); - - PyTuple_SetItem(info, 0, libvirt_intWrap((long) err->code)); - PyTuple_SetItem(info, 1, libvirt_intWrap((long) err->domain)); - PyTuple_SetItem(info, 2, libvirt_constcharPtrWrap(err->message)); - PyTuple_SetItem(info, 3, libvirt_intWrap((long) err->level)); - PyTuple_SetItem(info, 4, libvirt_constcharPtrWrap(err->str1)); - PyTuple_SetItem(info, 5, libvirt_constcharPtrWrap(err->str2)); - PyTuple_SetItem(info, 6, libvirt_constcharPtrWrap(err->str3)); - PyTuple_SetItem(info, 7, libvirt_intWrap((long) err->int1)); - PyTuple_SetItem(info, 8, libvirt_intWrap((long) err->int2)); + VIR_PY_TUPLE_SET_GOTO(list, 1, info, cleanup); + + VIR_PY_TUPLE_SET_GOTO(info, 0, libvirt_intWrap((long)err->code), cleanup); + VIR_PY_TUPLE_SET_GOTO(info, 1, libvirt_intWrap((long)err->domain), cleanup); + VIR_PY_TUPLE_SET_GOTO(info, 2, libvirt_constcharPtrWrap(err->message), cleanup); + VIR_PY_TUPLE_SET_GOTO(info, 3, libvirt_intWrap((long)err->level), cleanup); + VIR_PY_TUPLE_SET_GOTO(info, 4, libvirt_constcharPtrWrap(err->str1), cleanup); + VIR_PY_TUPLE_SET_GOTO(info, 5, libvirt_constcharPtrWrap(err->str2), cleanup); + VIR_PY_TUPLE_SET_GOTO(info, 6, libvirt_constcharPtrWrap(err->str3), cleanup); + VIR_PY_TUPLE_SET_GOTO(info, 7, libvirt_intWrap((long)err->int1), cleanup); + VIR_PY_TUPLE_SET_GOTO(info, 8, libvirt_intWrap((long)err->int2), cleanup); + /* TODO pass conn and dom if available */ result = PyEval_CallObject(libvirt_virPythonErrorFuncHandler, list); Py_XDECREF(result); @@ -1959,14 +1985,15 @@ virConnectCredCallbackWrapper(virConnectCredentialPtr cred, if ((pycred = PyTuple_New(ncred)) == NULL) goto cleanup; - PyTuple_SetItem(list, 0, pycred); + VIR_PY_TUPLE_SET_GOTO(list, 0, pycred, cleanup); for (i = 0; i < ncred; i++) { PyObject *pycreditem = PyList_New(5); if (pycreditem == NULL) goto cleanup; - PyTuple_SetItem(pycred, i, pycreditem); + VIR_PY_TUPLE_SET_GOTO(pycred, i, pycreditem, cleanup); + PyList_SetItem(pycreditem, 0, libvirt_intWrap((long) cred[i].type)); PyList_SetItem(pycreditem, 1, libvirt_constcharPtrWrap(cred[i].prompt)); if (cred[i].challenge) { @@ -1985,7 +2012,7 @@ virConnectCredCallbackWrapper(virConnectCredentialPtr cred, } Py_XINCREF(pycbdata); - PyTuple_SetItem(list, 1, pycbdata); + VIR_PY_TUPLE_SET_GOTO(list, 1, pycbdata, cleanup); PyErr_Clear(); pyret = PyEval_CallObject(pycb, list); @@ -5204,9 +5231,6 @@ libvirt_virEventAddHandleFunc(int fd, virFreeCallback ff) { PyObject *result; - PyObject *cb_obj; - PyObject *ff_obj; - PyObject *opaque_obj; PyObject *python_cb = NULL; PyObject *cb_args = NULL; PyObject *pyobj_args = NULL; @@ -5217,8 +5241,8 @@ libvirt_virEventAddHandleFunc(int fd, if ((pyobj_args = PyTuple_New(4)) == NULL) goto cleanup; - PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(fd)); - PyTuple_SetItem(pyobj_args, 1, libvirt_intWrap(event)); + VIR_PY_TUPLE_SET_GOTO(pyobj_args, 0, libvirt_intWrap(fd), cleanup); + VIR_PY_TUPLE_SET_GOTO(pyobj_args, 1, libvirt_intWrap(event), cleanup); /* Lookup the python callback */ python_cb = libvirt_lookupPythonFunc("_eventInvokeHandleCallback"); @@ -5227,20 +5251,16 @@ libvirt_virEventAddHandleFunc(int fd, } Py_INCREF(python_cb); - PyTuple_SetItem(pyobj_args, 2, python_cb); + VIR_PY_TUPLE_SET_GOTO(pyobj_args, 2, python_cb, cleanup); if ((cb_args = PyTuple_New(3)) == NULL) goto cleanup; - PyTuple_SetItem(pyobj_args, 3, cb_args); + VIR_PY_TUPLE_SET_GOTO(pyobj_args, 3, cb_args, cleanup); - /* create tuple for cb */ - cb_obj = libvirt_virEventHandleCallbackWrap(cb); - ff_obj = libvirt_virFreeCallbackWrap(ff); - opaque_obj = libvirt_virVoidPtrWrap(opaque); - PyTuple_SetItem(cb_args, 0, cb_obj); - PyTuple_SetItem(cb_args, 1, opaque_obj); - PyTuple_SetItem(cb_args, 2, ff_obj); + VIR_PY_TUPLE_SET_GOTO(cb_args, 0, libvirt_virEventHandleCallbackWrap(cb), cleanup); + VIR_PY_TUPLE_SET_GOTO(cb_args, 1, libvirt_virVoidPtrWrap(opaque), cleanup); + VIR_PY_TUPLE_SET_GOTO(cb_args, 2, libvirt_virFreeCallbackWrap(ff), cleanup); result = PyEval_CallObject(addHandleObj, pyobj_args); if (!result) { @@ -5272,8 +5292,8 @@ libvirt_virEventUpdateHandleFunc(int watch, if ((pyobj_args = PyTuple_New(2)) == NULL) goto cleanup; - PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(watch)); - PyTuple_SetItem(pyobj_args, 1, libvirt_intWrap(event)); + VIR_PY_TUPLE_SET_GOTO(pyobj_args, 0, libvirt_intWrap(watch), cleanup); + VIR_PY_TUPLE_SET_GOTO(pyobj_args, 1, libvirt_intWrap(event), cleanup); result = PyEval_CallObject(updateHandleObj, pyobj_args); if (!result) { @@ -5304,7 +5324,7 @@ libvirt_virEventRemoveHandleFunc(int watch) if ((pyobj_args = PyTuple_New(1)) == NULL) goto cleanup; - PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(watch)); + VIR_PY_TUPLE_SET_GOTO(pyobj_args, 0, libvirt_intWrap(watch), cleanup); result = PyEval_CallObject(removeHandleObj, pyobj_args); if (!result) { @@ -5339,9 +5359,6 @@ libvirt_virEventAddTimeoutFunc(int timeout, void *opaque, virFreeCallback ff) { - PyObject *cb_obj; - PyObject *ff_obj; - PyObject *opaque_obj; PyObject *result = NULL; PyObject *python_cb = NULL; PyObject *cb_args = NULL; @@ -5353,7 +5370,7 @@ libvirt_virEventAddTimeoutFunc(int timeout, if ((pyobj_args = PyTuple_New(3)) == NULL) goto cleanup; - PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(timeout)); + VIR_PY_TUPLE_SET_GOTO(pyobj_args, 0, libvirt_intWrap(timeout), cleanup); /* Lookup the python callback */ python_cb = libvirt_lookupPythonFunc("_eventInvokeTimeoutCallback"); @@ -5361,20 +5378,16 @@ libvirt_virEventAddTimeoutFunc(int timeout, goto cleanup; } Py_INCREF(python_cb); - PyTuple_SetItem(pyobj_args, 1, python_cb); + VIR_PY_TUPLE_SET_GOTO(pyobj_args, 1, python_cb, cleanup); if ((cb_args = PyTuple_New(3)) == NULL) goto cleanup; - PyTuple_SetItem(pyobj_args, 2, cb_args); + VIR_PY_TUPLE_SET_GOTO(pyobj_args, 2, cb_args, cleanup); - /* create tuple for cb */ - cb_obj = libvirt_virEventTimeoutCallbackWrap(cb); - ff_obj = libvirt_virFreeCallbackWrap(ff); - opaque_obj = libvirt_virVoidPtrWrap(opaque); - PyTuple_SetItem(cb_args, 0, cb_obj); - PyTuple_SetItem(cb_args, 1, opaque_obj); - PyTuple_SetItem(cb_args, 2, ff_obj); + VIR_PY_TUPLE_SET_GOTO(cb_args, 0, libvirt_virEventTimeoutCallbackWrap(cb), cleanup); + VIR_PY_TUPLE_SET_GOTO(cb_args, 1, libvirt_virVoidPtrWrap(opaque), cleanup); + VIR_PY_TUPLE_SET_GOTO(cb_args, 2, libvirt_virFreeCallbackWrap(ff), cleanup); result = PyEval_CallObject(addTimeoutObj, pyobj_args); if (!result) { @@ -5404,8 +5417,8 @@ libvirt_virEventUpdateTimeoutFunc(int timer, if ((pyobj_args = PyTuple_New(2)) == NULL) goto cleanup; - PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(timer)); - PyTuple_SetItem(pyobj_args, 1, libvirt_intWrap(timeout)); + VIR_PY_TUPLE_SET_GOTO(pyobj_args, 0, libvirt_intWrap(timer), cleanup); + VIR_PY_TUPLE_SET_GOTO(pyobj_args, 1, libvirt_intWrap(timeout), cleanup); result = PyEval_CallObject(updateTimeoutObj, pyobj_args); if (!result) { @@ -5435,7 +5448,7 @@ libvirt_virEventRemoveTimeoutFunc(int timer) if ((pyobj_args = PyTuple_New(1)) == NULL) goto cleanup; - PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(timer)); + VIR_PY_TUPLE_SET_GOTO(pyobj_args, 0, libvirt_intWrap(timer), cleanup); result = PyEval_CallObject(removeTimeoutObj, pyobj_args); if (!result) { @@ -6103,11 +6116,12 @@ libvirt_virConnectDomainEventGraphicsCallback(virConnectPtr conn ATTRIBUTE_UNUSE PyList_SetItem(pyobj_subject, i, pair); - PyTuple_SetItem(pair, 0, - libvirt_constcharPtrWrap(subject->identities[i].type)); - PyTuple_SetItem(pair, 1, - libvirt_constcharPtrWrap(subject->identities[i].name)); - + VIR_PY_TUPLE_SET_GOTO(pair, 0, + libvirt_constcharPtrWrap(subject->identities[i].type), + cleanup); + VIR_PY_TUPLE_SET_GOTO(pair, 1, + libvirt_constcharPtrWrap(subject->identities[i].name), + cleanup); } /* Call the Callback Dispatcher */ @@ -7660,16 +7674,13 @@ libvirt_virNodeGetCPUMap(PyObject *self ATTRIBUTE_UNUSED, goto error; /* 0: number of CPUs */ - if ((pycpunum = libvirt_intWrap(i_retval)) == NULL || - PyTuple_SetItem(ret, 0, pycpunum) < 0) - goto error; + VIR_PY_TUPLE_SET_GOTO(ret, 0, libvirt_intWrap(i_retval), error); /* 1: CPU map */ if ((pycpumap = PyList_New(i_retval)) == NULL) goto error; - if (PyTuple_SetItem(ret, 1, pycpumap) < 0) - goto error; + VIR_PY_TUPLE_SET_GOTO(ret, 1, pycpumap, error); for (i = 0; i < i_retval; i++) { if ((pyused = PyBool_FromLong(VIR_CPU_USED(cpumap, i))) == NULL) @@ -7679,9 +7690,7 @@ libvirt_virNodeGetCPUMap(PyObject *self ATTRIBUTE_UNUSED, } /* 2: number of online CPUs */ - if ((pyonline = libvirt_uintWrap(online)) == NULL || - PyTuple_SetItem(ret, 2, pyonline) < 0) - goto error; + VIR_PY_TUPLE_SET_GOTO(ret, 2, libvirt_uintWrap(online), error); cleanup: VIR_FREE(cpumap); @@ -8203,20 +8212,15 @@ convertDomainStatsRecord(virDomainStatsRecordPtr *records, /* libvirt_virDomainPtrWrap steals the object */ virDomainRef(records[i]->dom); - if (!(py_record_domain = libvirt_virDomainPtrWrap(records[i]->dom))) { - virDomainFree(records[i]->dom); - goto error; - } - - if (PyTuple_SetItem(py_record, 0, py_record_domain) < 0) - goto error; + VIR_PY_TUPLE_SET_GOTO(py_record, 0, + libvirt_virDomainPtrWrap(records[i]->dom), + error); if (!(py_record_stats = getPyVirTypedParameter(records[i]->params, records[i]->nparams))) goto error; + VIR_PY_TUPLE_SET_GOTO(py_record, 1, py_record_stats, error); - if (PyTuple_SetItem(py_record, 1, py_record_stats) < 0) - goto error; } return py_retval; @@ -8451,15 +8455,17 @@ libvirt_virDomainGetFSInfo(PyObject *self ATTRIBUTE_UNUSED, PyList_SetItem(py_retval, i, info); - PyTuple_SetItem(info, 0, libvirt_constcharPtrWrap(fs->mountpoint)); - PyTuple_SetItem(info, 1, libvirt_constcharPtrWrap(fs->name)); - PyTuple_SetItem(info, 2, libvirt_constcharPtrWrap(fs->fstype)); + VIR_PY_TUPLE_SET_GOTO(info, 0, + libvirt_constcharPtrWrap(fs->mountpoint), error); + VIR_PY_TUPLE_SET_GOTO(info, 1, + libvirt_constcharPtrWrap(fs->name), error); + VIR_PY_TUPLE_SET_GOTO(info, 2, + libvirt_constcharPtrWrap(fs->fstype), error); alias = PyList_New(0); if (alias == NULL) goto error; - - PyTuple_SetItem(info, 3, alias); + VIR_PY_TUPLE_SET_GOTO(info, 3, alias, error); for (j = 0; j < fs->ndevAlias; j++) if (PyList_Append(alias, -- 2.5.3

On 09/24/2015 10:01 AM, Pavel Hrdina wrote:
Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 304 +++++++++++++++++++++++++++-------------------------- 1 file changed, 155 insertions(+), 149 deletions(-)
diff --git a/libvirt-override.c b/libvirt-override.c index 205f0dd..c2e9fb9 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -116,12 +116,17 @@ libvirt_virDomainBlockStats(PyObject *self ATTRIBUTE_UNUSED, if ((info = PyTuple_New(5)) == NULL) return NULL;
- PyTuple_SetItem(info, 0, libvirt_longlongWrap(stats.rd_req)); - PyTuple_SetItem(info, 1, libvirt_longlongWrap(stats.rd_bytes)); - PyTuple_SetItem(info, 2, libvirt_longlongWrap(stats.wr_req)); - PyTuple_SetItem(info, 3, libvirt_longlongWrap(stats.wr_bytes)); - PyTuple_SetItem(info, 4, libvirt_longlongWrap(stats.errs)); + VIR_PY_TUPLE_SET_GOTO(info, 0, libvirt_longlongWrap(stats.rd_req), error); + VIR_PY_TUPLE_SET_GOTO(info, 1, libvirt_longlongWrap(stats.rd_bytes), error); + VIR_PY_TUPLE_SET_GOTO(info, 2, libvirt_longlongWrap(stats.wr_req), error); + VIR_PY_TUPLE_SET_GOTO(info, 3, libvirt_longlongWrap(stats.wr_bytes), error); + VIR_PY_TUPLE_SET_GOTO(info, 4, libvirt_longlongWrap(stats.errs), error); + return info; + +error: + Py_DECREF(info); + return NULL; }
static PyObject * @@ -337,15 +342,20 @@ libvirt_virDomainInterfaceStats(PyObject *self ATTRIBUTE_UNUSED, if ((info = PyTuple_New(8)) == NULL) return NULL;
- PyTuple_SetItem(info, 0, libvirt_longlongWrap(stats.rx_bytes)); - PyTuple_SetItem(info, 1, libvirt_longlongWrap(stats.rx_packets)); - PyTuple_SetItem(info, 2, libvirt_longlongWrap(stats.rx_errs)); - PyTuple_SetItem(info, 3, libvirt_longlongWrap(stats.rx_drop)); - PyTuple_SetItem(info, 4, libvirt_longlongWrap(stats.tx_bytes)); - PyTuple_SetItem(info, 5, libvirt_longlongWrap(stats.tx_packets)); - PyTuple_SetItem(info, 6, libvirt_longlongWrap(stats.tx_errs)); - PyTuple_SetItem(info, 7, libvirt_longlongWrap(stats.tx_drop)); + VIR_PY_TUPLE_SET_GOTO(info, 0, libvirt_longlongWrap(stats.rx_bytes), error); + VIR_PY_TUPLE_SET_GOTO(info, 1, libvirt_longlongWrap(stats.rx_packets), error); + VIR_PY_TUPLE_SET_GOTO(info, 2, libvirt_longlongWrap(stats.rx_errs), error); + VIR_PY_TUPLE_SET_GOTO(info, 3, libvirt_longlongWrap(stats.rx_drop), error); + VIR_PY_TUPLE_SET_GOTO(info, 4, libvirt_longlongWrap(stats.tx_bytes), error); + VIR_PY_TUPLE_SET_GOTO(info, 5, libvirt_longlongWrap(stats.tx_packets), error); + VIR_PY_TUPLE_SET_GOTO(info, 6, libvirt_longlongWrap(stats.tx_errs), error); + VIR_PY_TUPLE_SET_GOTO(info, 7, libvirt_longlongWrap(stats.tx_drop), error); + return info; + + error: + Py_DECREF(info); + return NULL; }
static PyObject * @@ -442,12 +452,17 @@ libvirt_virDomainGetSchedulerType(PyObject *self ATTRIBUTE_UNUSED, if ((info = PyTuple_New(2)) == NULL) goto cleanup;
- PyTuple_SetItem(info, 0, libvirt_constcharPtrWrap(c_retval)); - PyTuple_SetItem(info, 1, libvirt_intWrap((long)nparams)); + VIR_PY_TUPLE_SET_GOTO(info, 0, libvirt_constcharPtrWrap(c_retval), error); + VIR_PY_TUPLE_SET_GOTO(info, 1, libvirt_intWrap((long)nparams), error);
cleanup: VIR_FREE(c_retval); return info; + + error: + Py_CLEAR(info); + goto cleanup; + }
static PyObject * @@ -1239,18 +1254,15 @@ libvirt_virDomainGetVcpus(PyObject *self ATTRIBUTE_UNUSED, if ((pycpuinfo = PyList_New(dominfo.nrVirtCpu)) == NULL) goto cleanup;
- if (PyTuple_SetItem(pyretval, 0, pycpuinfo) < 0) - goto cleanup; + VIR_PY_TUPLE_SET_GOTO(pyretval, 0, pycpuinfo, cleanup);
if ((pycpumap = PyList_New(dominfo.nrVirtCpu)) == NULL) goto cleanup;
- if (PyTuple_SetItem(pyretval, 1, pycpumap) < 0) - goto cleanup; + VIR_PY_TUPLE_SET_GOTO(pyretval, 1, pycpumap, cleanup);
for (i = 0; i < dominfo.nrVirtCpu; i++) { PyObject *info = PyTuple_New(4); - PyObject *item = NULL;
if (info == NULL) goto cleanup; @@ -1258,21 +1270,15 @@ libvirt_virDomainGetVcpus(PyObject *self ATTRIBUTE_UNUSED, if (PyList_SetItem(pycpuinfo, i, info) < 0) goto cleanup;
- if ((item = libvirt_intWrap((long)cpuinfo[i].number)) == NULL || - PyTuple_SetItem(info, 0, item) < 0) - goto cleanup; - - if ((item = libvirt_intWrap((long)cpuinfo[i].state)) == NULL || - PyTuple_SetItem(info, 1, item) < 0) - goto cleanup; - - if ((item = libvirt_ulonglongWrap(cpuinfo[i].cpuTime)) == NULL || - PyTuple_SetItem(info, 2, item) < 0) - goto cleanup; - - if ((item = libvirt_intWrap((long)cpuinfo[i].cpu)) == NULL || - PyTuple_SetItem(info, 3, item) < 0) - goto cleanup; + VIR_PY_TUPLE_SET_GOTO(info, 0, libvirt_intWrap((long)cpuinfo[i].number), + cleanup); + VIR_PY_TUPLE_SET_GOTO(info, 1, libvirt_intWrap((long)cpuinfo[i].state), + cleanup); + VIR_PY_TUPLE_SET_GOTO(info, 2, + libvirt_ulonglongWrap((long)cpuinfo[i].cpuTime), + cleanup); + VIR_PY_TUPLE_SET_GOTO(info, 3, libvirt_intWrap((long)cpuinfo[i].cpu), + cleanup); } for (i = 0; i < dominfo.nrVirtCpu; i++) { PyObject *info = PyTuple_New(cpunum); @@ -1284,11 +1290,11 @@ libvirt_virDomainGetVcpus(PyObject *self ATTRIBUTE_UNUSED, goto cleanup;
for (j = 0; j < cpunum; j++) { - PyObject *item = NULL; - if ((item = PyBool_FromLong(VIR_CPU_USABLE(cpumap, cpumaplen, - i, j))) == NULL || - PyTuple_SetItem(info, j, item) < 0) - goto cleanup; + VIR_PY_TUPLE_SET_GOTO(info, j, + PyBool_FromLong(VIR_CPU_USABLE(cpumap, + cpumaplen, + i, j)), + cleanup); } }
@@ -1485,9 +1491,13 @@ libvirt_virDomainGetVcpuPinInfo(PyObject *self ATTRIBUTE_UNUSED, PyList_SetItem(pycpumaps, vcpu, mapinfo);
for (pcpu = 0; pcpu < cpunum; pcpu++) { - PyTuple_SetItem(mapinfo, pcpu, - PyBool_FromLong(VIR_CPU_USABLE(cpumaps, cpumaplen, - vcpu, pcpu))); + VIR_PY_TUPLE_SET_GOTO(mapinfo, + pcpu, + PyBool_FromLong(VIR_CPU_USABLE(cpumaps, + cpumaplen, + vcpu, + pcpu)), + cleanup); } }
@@ -1611,13 +1621,23 @@ libvirt_virDomainGetEmulatorPinInfo(PyObject *self ATTRIBUTE_UNUSED, return NULL; }
- for (pcpu = 0; pcpu < cpunum; pcpu++) - PyTuple_SET_ITEM(pycpumap, pcpu, - PyBool_FromLong(VIR_CPU_USABLE(cpumap, cpumaplen, - 0, pcpu))); + for (pcpu = 0; pcpu < cpunum; pcpu++) { + VIR_PY_TUPLE_SET_GOTO(pycpumap, + pcpu, + PyBool_FromLong(VIR_CPU_USABLE(cpumap, + cpumaplen, + 0, + pcpu)), + error); + }
+ cleanup: VIR_FREE(cpumap); return pycpumap; + + error: + Py_CLEAR(pycpumap); + goto cleanup; } #endif /* LIBVIR_CHECK_VERSION(0, 10, 0) */
@@ -1675,18 +1695,15 @@ libvirt_virDomainGetIOThreadInfo(PyObject *self ATTRIBUTE_UNUSED, }
/* 0: IOThread ID */ - if ((iothrid = libvirt_uintWrap(iothr->iothread_id)) == NULL || - PyTuple_SetItem(iothrtpl, 0, iothrid) < 0) { - Py_XDECREF(iothrid); - goto cleanup; - } + VIR_PY_TUPLE_SET_GOTO(iothrtpl, 0, libvirt_uintWrap(iothr->iothread_id), + cleanup);
Build error 'iothrid' no longer necessary
/* 1: CPU map */ - if ((iothrmap = PyList_New(cpunum)) == NULL || - PyTuple_SetItem(iothrtpl, 1, iothrmap) < 0) { - Py_XDECREF(iothrmap); + if ((iothrmap = PyList_New(cpunum)) == NULL) goto cleanup; - } + + VIR_PY_TUPLE_SET_GOTO(iothrtpl, 1, iothrmap, cleanup); + for (pcpu = 0; pcpu < cpunum; pcpu++) { PyObject *pyused; if ((pyused = PyBool_FromLong(VIR_CPU_USED(iothr->cpumap, @@ -1801,17 +1818,21 @@ libvirt_virGetLastError(PyObject *self ATTRIBUTE_UNUSED, if ((info = PyTuple_New(9)) == NULL) return NULL;
- PyTuple_SetItem(info, 0, libvirt_intWrap((long) err->code)); - PyTuple_SetItem(info, 1, libvirt_intWrap((long) err->domain)); - PyTuple_SetItem(info, 2, libvirt_constcharPtrWrap(err->message)); - PyTuple_SetItem(info, 3, libvirt_intWrap((long) err->level)); - PyTuple_SetItem(info, 4, libvirt_constcharPtrWrap(err->str1)); - PyTuple_SetItem(info, 5, libvirt_constcharPtrWrap(err->str2)); - PyTuple_SetItem(info, 6, libvirt_constcharPtrWrap(err->str3)); - PyTuple_SetItem(info, 7, libvirt_intWrap((long) err->int1)); - PyTuple_SetItem(info, 8, libvirt_intWrap((long) err->int2)); + VIR_PY_TUPLE_SET_GOTO(info, 0, libvirt_intWrap((long)err->code), error); + VIR_PY_TUPLE_SET_GOTO(info, 1, libvirt_intWrap((long)err->domain), error); + VIR_PY_TUPLE_SET_GOTO(info, 2, libvirt_constcharPtrWrap(err->message), error); + VIR_PY_TUPLE_SET_GOTO(info, 3, libvirt_intWrap((long)err->level), error); + VIR_PY_TUPLE_SET_GOTO(info, 4, libvirt_constcharPtrWrap(err->str1), error); + VIR_PY_TUPLE_SET_GOTO(info, 5, libvirt_constcharPtrWrap(err->str2), error); + VIR_PY_TUPLE_SET_GOTO(info, 6, libvirt_constcharPtrWrap(err->str3), error); + VIR_PY_TUPLE_SET_GOTO(info, 7, libvirt_intWrap((long)err->int1), error); + VIR_PY_TUPLE_SET_GOTO(info, 8, libvirt_intWrap((long)err->int2), error);
return info; + + error: + Py_XDECREF(info); + return NULL; }
static PyObject * @@ -1836,17 +1857,21 @@ libvirt_virConnGetLastError(PyObject *self ATTRIBUTE_UNUSED, if ((info = PyTuple_New(9)) == NULL) return NULL;
- PyTuple_SetItem(info, 0, libvirt_intWrap((long) err->code)); - PyTuple_SetItem(info, 1, libvirt_intWrap((long) err->domain)); - PyTuple_SetItem(info, 2, libvirt_constcharPtrWrap(err->message)); - PyTuple_SetItem(info, 3, libvirt_intWrap((long) err->level)); - PyTuple_SetItem(info, 4, libvirt_constcharPtrWrap(err->str1)); - PyTuple_SetItem(info, 5, libvirt_constcharPtrWrap(err->str2)); - PyTuple_SetItem(info, 6, libvirt_constcharPtrWrap(err->str3)); - PyTuple_SetItem(info, 7, libvirt_intWrap((long) err->int1)); - PyTuple_SetItem(info, 8, libvirt_intWrap((long) err->int2)); + VIR_PY_TUPLE_SET_GOTO(info, 0, libvirt_intWrap((long)err->code), error); + VIR_PY_TUPLE_SET_GOTO(info, 1, libvirt_intWrap((long)err->domain), error); + VIR_PY_TUPLE_SET_GOTO(info, 2, libvirt_constcharPtrWrap(err->message), error); + VIR_PY_TUPLE_SET_GOTO(info, 3, libvirt_intWrap((long)err->level), error); + VIR_PY_TUPLE_SET_GOTO(info, 4, libvirt_constcharPtrWrap(err->str1), error); + VIR_PY_TUPLE_SET_GOTO(info, 5, libvirt_constcharPtrWrap(err->str2), error); + VIR_PY_TUPLE_SET_GOTO(info, 6, libvirt_constcharPtrWrap(err->str3), error); + VIR_PY_TUPLE_SET_GOTO(info, 7, libvirt_intWrap((long)err->int1), error); + VIR_PY_TUPLE_SET_GOTO(info, 8, libvirt_intWrap((long)err->int2), error);
return info; + + error: + Py_XDECREF(info); + return NULL; }
static void @@ -1872,22 +1897,23 @@ libvirt_virErrorFuncHandler(ATTRIBUTE_UNUSED void *ctx, goto cleanup;
Py_XINCREF(libvirt_virPythonErrorFuncCtxt); - PyTuple_SetItem(list, 0, libvirt_virPythonErrorFuncCtxt); + VIR_PY_TUPLE_SET_GOTO(list, 0, libvirt_virPythonErrorFuncCtxt, cleanup);
if ((info = PyTuple_New(9)) == NULL) goto cleanup;
- PyTuple_SetItem(list, 1, info); - - PyTuple_SetItem(info, 0, libvirt_intWrap((long) err->code)); - PyTuple_SetItem(info, 1, libvirt_intWrap((long) err->domain)); - PyTuple_SetItem(info, 2, libvirt_constcharPtrWrap(err->message)); - PyTuple_SetItem(info, 3, libvirt_intWrap((long) err->level)); - PyTuple_SetItem(info, 4, libvirt_constcharPtrWrap(err->str1)); - PyTuple_SetItem(info, 5, libvirt_constcharPtrWrap(err->str2)); - PyTuple_SetItem(info, 6, libvirt_constcharPtrWrap(err->str3)); - PyTuple_SetItem(info, 7, libvirt_intWrap((long) err->int1)); - PyTuple_SetItem(info, 8, libvirt_intWrap((long) err->int2)); + VIR_PY_TUPLE_SET_GOTO(list, 1, info, cleanup); + + VIR_PY_TUPLE_SET_GOTO(info, 0, libvirt_intWrap((long)err->code), cleanup); + VIR_PY_TUPLE_SET_GOTO(info, 1, libvirt_intWrap((long)err->domain), cleanup); + VIR_PY_TUPLE_SET_GOTO(info, 2, libvirt_constcharPtrWrap(err->message), cleanup); + VIR_PY_TUPLE_SET_GOTO(info, 3, libvirt_intWrap((long)err->level), cleanup); + VIR_PY_TUPLE_SET_GOTO(info, 4, libvirt_constcharPtrWrap(err->str1), cleanup); + VIR_PY_TUPLE_SET_GOTO(info, 5, libvirt_constcharPtrWrap(err->str2), cleanup); + VIR_PY_TUPLE_SET_GOTO(info, 6, libvirt_constcharPtrWrap(err->str3), cleanup); + VIR_PY_TUPLE_SET_GOTO(info, 7, libvirt_intWrap((long)err->int1), cleanup); + VIR_PY_TUPLE_SET_GOTO(info, 8, libvirt_intWrap((long)err->int2), cleanup); + /* TODO pass conn and dom if available */ result = PyEval_CallObject(libvirt_virPythonErrorFuncHandler, list); Py_XDECREF(result); @@ -1959,14 +1985,15 @@ virConnectCredCallbackWrapper(virConnectCredentialPtr cred, if ((pycred = PyTuple_New(ncred)) == NULL) goto cleanup;
- PyTuple_SetItem(list, 0, pycred); + VIR_PY_TUPLE_SET_GOTO(list, 0, pycred, cleanup);
for (i = 0; i < ncred; i++) { PyObject *pycreditem = PyList_New(5); if (pycreditem == NULL) goto cleanup;
- PyTuple_SetItem(pycred, i, pycreditem); + VIR_PY_TUPLE_SET_GOTO(pycred, i, pycreditem, cleanup); + PyList_SetItem(pycreditem, 0, libvirt_intWrap((long) cred[i].type)); PyList_SetItem(pycreditem, 1, libvirt_constcharPtrWrap(cred[i].prompt)); if (cred[i].challenge) { @@ -1985,7 +2012,7 @@ virConnectCredCallbackWrapper(virConnectCredentialPtr cred, }
Py_XINCREF(pycbdata); - PyTuple_SetItem(list, 1, pycbdata); + VIR_PY_TUPLE_SET_GOTO(list, 1, pycbdata, cleanup);
PyErr_Clear(); pyret = PyEval_CallObject(pycb, list); @@ -5204,9 +5231,6 @@ libvirt_virEventAddHandleFunc(int fd, virFreeCallback ff) { PyObject *result; - PyObject *cb_obj; - PyObject *ff_obj; - PyObject *opaque_obj; PyObject *python_cb = NULL; PyObject *cb_args = NULL; PyObject *pyobj_args = NULL; @@ -5217,8 +5241,8 @@ libvirt_virEventAddHandleFunc(int fd, if ((pyobj_args = PyTuple_New(4)) == NULL) goto cleanup;
- PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(fd)); - PyTuple_SetItem(pyobj_args, 1, libvirt_intWrap(event)); + VIR_PY_TUPLE_SET_GOTO(pyobj_args, 0, libvirt_intWrap(fd), cleanup); + VIR_PY_TUPLE_SET_GOTO(pyobj_args, 1, libvirt_intWrap(event), cleanup);
/* Lookup the python callback */ python_cb = libvirt_lookupPythonFunc("_eventInvokeHandleCallback"); @@ -5227,20 +5251,16 @@ libvirt_virEventAddHandleFunc(int fd, } Py_INCREF(python_cb);
- PyTuple_SetItem(pyobj_args, 2, python_cb); + VIR_PY_TUPLE_SET_GOTO(pyobj_args, 2, python_cb, cleanup);
if ((cb_args = PyTuple_New(3)) == NULL) goto cleanup;
- PyTuple_SetItem(pyobj_args, 3, cb_args); + VIR_PY_TUPLE_SET_GOTO(pyobj_args, 3, cb_args, cleanup);
- /* create tuple for cb */ - cb_obj = libvirt_virEventHandleCallbackWrap(cb); - ff_obj = libvirt_virFreeCallbackWrap(ff); - opaque_obj = libvirt_virVoidPtrWrap(opaque); - PyTuple_SetItem(cb_args, 0, cb_obj); - PyTuple_SetItem(cb_args, 1, opaque_obj); - PyTuple_SetItem(cb_args, 2, ff_obj); + VIR_PY_TUPLE_SET_GOTO(cb_args, 0, libvirt_virEventHandleCallbackWrap(cb), cleanup); + VIR_PY_TUPLE_SET_GOTO(cb_args, 1, libvirt_virVoidPtrWrap(opaque), cleanup); + VIR_PY_TUPLE_SET_GOTO(cb_args, 2, libvirt_virFreeCallbackWrap(ff), cleanup);
result = PyEval_CallObject(addHandleObj, pyobj_args); if (!result) { @@ -5272,8 +5292,8 @@ libvirt_virEventUpdateHandleFunc(int watch, if ((pyobj_args = PyTuple_New(2)) == NULL) goto cleanup;
- PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(watch)); - PyTuple_SetItem(pyobj_args, 1, libvirt_intWrap(event)); + VIR_PY_TUPLE_SET_GOTO(pyobj_args, 0, libvirt_intWrap(watch), cleanup); + VIR_PY_TUPLE_SET_GOTO(pyobj_args, 1, libvirt_intWrap(event), cleanup);
result = PyEval_CallObject(updateHandleObj, pyobj_args); if (!result) { @@ -5304,7 +5324,7 @@ libvirt_virEventRemoveHandleFunc(int watch) if ((pyobj_args = PyTuple_New(1)) == NULL) goto cleanup;
- PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(watch)); + VIR_PY_TUPLE_SET_GOTO(pyobj_args, 0, libvirt_intWrap(watch), cleanup);
result = PyEval_CallObject(removeHandleObj, pyobj_args); if (!result) { @@ -5339,9 +5359,6 @@ libvirt_virEventAddTimeoutFunc(int timeout, void *opaque, virFreeCallback ff) { - PyObject *cb_obj; - PyObject *ff_obj; - PyObject *opaque_obj; PyObject *result = NULL; PyObject *python_cb = NULL; PyObject *cb_args = NULL; @@ -5353,7 +5370,7 @@ libvirt_virEventAddTimeoutFunc(int timeout, if ((pyobj_args = PyTuple_New(3)) == NULL) goto cleanup;
- PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(timeout)); + VIR_PY_TUPLE_SET_GOTO(pyobj_args, 0, libvirt_intWrap(timeout), cleanup);
/* Lookup the python callback */ python_cb = libvirt_lookupPythonFunc("_eventInvokeTimeoutCallback"); @@ -5361,20 +5378,16 @@ libvirt_virEventAddTimeoutFunc(int timeout, goto cleanup; } Py_INCREF(python_cb); - PyTuple_SetItem(pyobj_args, 1, python_cb); + VIR_PY_TUPLE_SET_GOTO(pyobj_args, 1, python_cb, cleanup);
if ((cb_args = PyTuple_New(3)) == NULL) goto cleanup;
- PyTuple_SetItem(pyobj_args, 2, cb_args); + VIR_PY_TUPLE_SET_GOTO(pyobj_args, 2, cb_args, cleanup);
- /* create tuple for cb */ - cb_obj = libvirt_virEventTimeoutCallbackWrap(cb); - ff_obj = libvirt_virFreeCallbackWrap(ff); - opaque_obj = libvirt_virVoidPtrWrap(opaque); - PyTuple_SetItem(cb_args, 0, cb_obj); - PyTuple_SetItem(cb_args, 1, opaque_obj); - PyTuple_SetItem(cb_args, 2, ff_obj); + VIR_PY_TUPLE_SET_GOTO(cb_args, 0, libvirt_virEventTimeoutCallbackWrap(cb), cleanup); + VIR_PY_TUPLE_SET_GOTO(cb_args, 1, libvirt_virVoidPtrWrap(opaque), cleanup); + VIR_PY_TUPLE_SET_GOTO(cb_args, 2, libvirt_virFreeCallbackWrap(ff), cleanup);
result = PyEval_CallObject(addTimeoutObj, pyobj_args); if (!result) { @@ -5404,8 +5417,8 @@ libvirt_virEventUpdateTimeoutFunc(int timer, if ((pyobj_args = PyTuple_New(2)) == NULL) goto cleanup;
- PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(timer)); - PyTuple_SetItem(pyobj_args, 1, libvirt_intWrap(timeout)); + VIR_PY_TUPLE_SET_GOTO(pyobj_args, 0, libvirt_intWrap(timer), cleanup); + VIR_PY_TUPLE_SET_GOTO(pyobj_args, 1, libvirt_intWrap(timeout), cleanup);
result = PyEval_CallObject(updateTimeoutObj, pyobj_args); if (!result) { @@ -5435,7 +5448,7 @@ libvirt_virEventRemoveTimeoutFunc(int timer) if ((pyobj_args = PyTuple_New(1)) == NULL) goto cleanup;
- PyTuple_SetItem(pyobj_args, 0, libvirt_intWrap(timer)); + VIR_PY_TUPLE_SET_GOTO(pyobj_args, 0, libvirt_intWrap(timer), cleanup);
result = PyEval_CallObject(removeTimeoutObj, pyobj_args); if (!result) { @@ -6103,11 +6116,12 @@ libvirt_virConnectDomainEventGraphicsCallback(virConnectPtr conn ATTRIBUTE_UNUSE
PyList_SetItem(pyobj_subject, i, pair);
- PyTuple_SetItem(pair, 0, - libvirt_constcharPtrWrap(subject->identities[i].type)); - PyTuple_SetItem(pair, 1, - libvirt_constcharPtrWrap(subject->identities[i].name)); - + VIR_PY_TUPLE_SET_GOTO(pair, 0, + libvirt_constcharPtrWrap(subject->identities[i].type), + cleanup); + VIR_PY_TUPLE_SET_GOTO(pair, 1, + libvirt_constcharPtrWrap(subject->identities[i].name), + cleanup); }
/* Call the Callback Dispatcher */ @@ -7660,16 +7674,13 @@ libvirt_virNodeGetCPUMap(PyObject *self ATTRIBUTE_UNUSED, goto error;
/* 0: number of CPUs */ - if ((pycpunum = libvirt_intWrap(i_retval)) == NULL || - PyTuple_SetItem(ret, 0, pycpunum) < 0) - goto error; + VIR_PY_TUPLE_SET_GOTO(ret, 0, libvirt_intWrap(i_retval), error);
Build issue - pycpunum no longer necessary
/* 1: CPU map */ if ((pycpumap = PyList_New(i_retval)) == NULL) goto error;
- if (PyTuple_SetItem(ret, 1, pycpumap) < 0) - goto error; + VIR_PY_TUPLE_SET_GOTO(ret, 1, pycpumap, error);
Build issue - pycpumap no longer necessary
for (i = 0; i < i_retval; i++) { if ((pyused = PyBool_FromLong(VIR_CPU_USED(cpumap, i))) == NULL) @@ -7679,9 +7690,7 @@ libvirt_virNodeGetCPUMap(PyObject *self ATTRIBUTE_UNUSED, }
/* 2: number of online CPUs */ - if ((pyonline = libvirt_uintWrap(online)) == NULL || - PyTuple_SetItem(ret, 2, pyonline) < 0) - goto error; + VIR_PY_TUPLE_SET_GOTO(ret, 2, libvirt_uintWrap(online), error);
cleanup: VIR_FREE(cpumap); @@ -8203,20 +8212,15 @@ convertDomainStatsRecord(virDomainStatsRecordPtr *records,
/* libvirt_virDomainPtrWrap steals the object */ virDomainRef(records[i]->dom); - if (!(py_record_domain = libvirt_virDomainPtrWrap(records[i]->dom))) { - virDomainFree(records[i]->dom); - goto error; - } - - if (PyTuple_SetItem(py_record, 0, py_record_domain) < 0) - goto error; + VIR_PY_TUPLE_SET_GOTO(py_record, 0, + libvirt_virDomainPtrWrap(records[i]->dom), + error);
build issue 'py_record_domain' no longer necessary John
if (!(py_record_stats = getPyVirTypedParameter(records[i]->params, records[i]->nparams))) goto error; + VIR_PY_TUPLE_SET_GOTO(py_record, 1, py_record_stats, error);
- if (PyTuple_SetItem(py_record, 1, py_record_stats) < 0) - goto error; }
return py_retval; @@ -8451,15 +8455,17 @@ libvirt_virDomainGetFSInfo(PyObject *self ATTRIBUTE_UNUSED,
PyList_SetItem(py_retval, i, info);
- PyTuple_SetItem(info, 0, libvirt_constcharPtrWrap(fs->mountpoint)); - PyTuple_SetItem(info, 1, libvirt_constcharPtrWrap(fs->name)); - PyTuple_SetItem(info, 2, libvirt_constcharPtrWrap(fs->fstype)); + VIR_PY_TUPLE_SET_GOTO(info, 0, + libvirt_constcharPtrWrap(fs->mountpoint), error); + VIR_PY_TUPLE_SET_GOTO(info, 1, + libvirt_constcharPtrWrap(fs->name), error); + VIR_PY_TUPLE_SET_GOTO(info, 2, + libvirt_constcharPtrWrap(fs->fstype), error);
alias = PyList_New(0); if (alias == NULL) goto error; - - PyTuple_SetItem(info, 3, alias); + VIR_PY_TUPLE_SET_GOTO(info, 3, alias, error);
for (j = 0; j < fs->ndevAlias; j++) if (PyList_Append(alias,

Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-lxc-override.c | 13 +- libvirt-override.c | 615 ++++++++++++++++++++++++++++--------------------- 2 files changed, 350 insertions(+), 278 deletions(-) diff --git a/libvirt-lxc-override.c b/libvirt-lxc-override.c index b0550c7..316a500 100644 --- a/libvirt-lxc-override.c +++ b/libvirt-lxc-override.c @@ -82,17 +82,8 @@ libvirt_lxc_virDomainLxcOpenNamespace(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(0)) == NULL) goto error; - for (i = 0; i < c_retval; i++) { - PyObject *item = NULL; - - if ((item = libvirt_intWrap(fdlist[i])) == NULL) - goto error; - - if (PyList_Append(py_retval, item) < 0) { - Py_DECREF(item); - goto error; - } - } + for (i = 0; i < c_retval; i++) + VIR_PY_LIST_APPEND_GOTO(py_retval, libvirt_intWrap(fdlist[1]), error); cleanup: VIR_FREE(fdlist); diff --git a/libvirt-override.c b/libvirt-override.c index c2e9fb9..1f795d9 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -250,15 +250,10 @@ libvirt_virDomainGetCPUStats(PyObject *self ATTRIBUTE_UNUSED, for (i = 0; i < queried_ncpus; i++) { cpuparams = ¶ms[i * nparams]; - if ((cpu = getPyVirTypedParameter(cpuparams, i_retval)) == NULL) { - goto error; - } - - if (PyList_Append(ret, cpu) < 0) { - Py_DECREF(cpu); - goto error; - } - Py_DECREF(cpu); + VIR_PY_LIST_APPEND_GOTO(ret, + getPyVirTypedParameter(cpuparams, + i_retval), + error); } start_cpu += queried_ncpus; @@ -296,14 +291,8 @@ libvirt_virDomainGetCPUStats(PyObject *self ATTRIBUTE_UNUSED, i_retval = 0; } - if ((total = getPyVirTypedParameter(params, i_retval)) == NULL) { - goto error; - } - if (PyList_Append(ret, total) < 0) { - Py_DECREF(total); - goto error; - } - Py_DECREF(total); + VIR_PY_LIST_APPEND_GOTO(ret, getPyVirTypedParameter(params, i_retval), + error); } virTypedParamsFree(params, sumparams); @@ -1267,8 +1256,7 @@ libvirt_virDomainGetVcpus(PyObject *self ATTRIBUTE_UNUSED, if (info == NULL) goto cleanup; - if (PyList_SetItem(pycpuinfo, i, info) < 0) - goto cleanup; + VIR_PY_LIST_SET_GOTO(pycpuinfo, i, info, cleanup); VIR_PY_TUPLE_SET_GOTO(info, 0, libvirt_intWrap((long)cpuinfo[i].number), cleanup); @@ -1286,8 +1274,7 @@ libvirt_virDomainGetVcpus(PyObject *self ATTRIBUTE_UNUSED, if (info == NULL) goto cleanup; - if (PyList_SetItem(pycpumap, i, info) < 0) - goto cleanup; + VIR_PY_LIST_SET_GOTO(pycpumap, i, info, cleanup); for (j = 0; j < cpunum; j++) { VIR_PY_TUPLE_SET_GOTO(info, j, @@ -1488,7 +1475,7 @@ libvirt_virDomainGetVcpuPinInfo(PyObject *self ATTRIBUTE_UNUSED, if (mapinfo == NULL) goto cleanup; - PyList_SetItem(pycpumaps, vcpu, mapinfo); + VIR_PY_LIST_SET_GOTO(pycpumaps, vcpu, mapinfo, cleanup); for (pcpu = 0; pcpu < cpunum; pcpu++) { VIR_PY_TUPLE_SET_GOTO(mapinfo, @@ -1688,11 +1675,10 @@ libvirt_virDomainGetIOThreadInfo(PyObject *self ATTRIBUTE_UNUSED, goto cleanup; } - if ((iothrtpl = PyTuple_New(2)) == NULL || - PyList_SetItem(py_iothrinfo, i, iothrtpl) < 0) { - Py_XDECREF(iothrtpl); + if ((iothrtpl = PyTuple_New(2)) == NULL) goto cleanup; - } + + VIR_PY_LIST_SET_GOTO(py_iothrinfo, i, iothrtpl, cleanup); /* 0: IOThread ID */ VIR_PY_TUPLE_SET_GOTO(iothrtpl, 0, libvirt_uintWrap(iothr->iothread_id), @@ -1704,17 +1690,11 @@ libvirt_virDomainGetIOThreadInfo(PyObject *self ATTRIBUTE_UNUSED, VIR_PY_TUPLE_SET_GOTO(iothrtpl, 1, iothrmap, cleanup); - for (pcpu = 0; pcpu < cpunum; pcpu++) { - PyObject *pyused; - if ((pyused = PyBool_FromLong(VIR_CPU_USED(iothr->cpumap, - pcpu))) == NULL) { - goto cleanup; - } - if (PyList_SetItem(iothrmap, pcpu, pyused) < 0) { - Py_XDECREF(pyused); - goto cleanup; - } - } + for (pcpu = 0; pcpu < cpunum; pcpu++) + VIR_PY_LIST_SET_GOTO(iothrmap, pcpu, + PyBool_FromLong(VIR_CPU_USED(iothr->cpumap, + pcpu)), + cleanup); } py_retval = py_iothrinfo; @@ -1994,21 +1974,26 @@ virConnectCredCallbackWrapper(virConnectCredentialPtr cred, VIR_PY_TUPLE_SET_GOTO(pycred, i, pycreditem, cleanup); - PyList_SetItem(pycreditem, 0, libvirt_intWrap((long) cred[i].type)); - PyList_SetItem(pycreditem, 1, libvirt_constcharPtrWrap(cred[i].prompt)); + VIR_PY_LIST_SET_GOTO(pycreditem, 0, + libvirt_intWrap((long)cred[i].type), cleanup); + VIR_PY_LIST_SET_GOTO(pycreditem, 1, + libvirt_constcharPtrWrap(cred[i].prompt), cleanup); + if (cred[i].challenge) { - PyList_SetItem(pycreditem, 2, - libvirt_constcharPtrWrap(cred[i].challenge)); + VIR_PY_LIST_SET_GOTO(pycreditem, 2, + libvirt_constcharPtrWrap(cred[i].challenge), + cleanup); } else { - PyList_SetItem(pycreditem, 2, VIR_PY_NONE); + VIR_PY_LIST_SET_GOTO(pycreditem, 2, VIR_PY_NONE, cleanup); } if (cred[i].defresult) { - PyList_SetItem(pycreditem, 3, - libvirt_constcharPtrWrap(cred[i].defresult)); + VIR_PY_LIST_SET_GOTO(pycreditem, 3, + libvirt_constcharPtrWrap(cred[i].defresult), + cleanup); } else { - PyList_SetItem(pycreditem, 3, VIR_PY_NONE); + VIR_PY_LIST_SET_GOTO(pycreditem, 3, VIR_PY_NONE, cleanup); } - PyList_SetItem(pycreditem, 4, VIR_PY_NONE); + VIR_PY_LIST_SET_GOTO(pycreditem, 4, VIR_PY_NONE, cleanup); } Py_XINCREF(pycbdata); @@ -2188,13 +2173,8 @@ libvirt_virConnectGetCPUModelNames(PyObject *self ATTRIBUTE_UNUSED, if ((rv = PyList_New(c_retval)) == NULL) goto error; - for (i = 0; i < c_retval; i++) { - PyObject *str; - if ((str = libvirt_constcharPtrWrap(models[i])) == NULL) - goto error; - - PyList_SET_ITEM(rv, i, str); - } + for (i = 0; i < c_retval; i++) + VIR_PY_LIST_SET_GOTO(rv, i, libvirt_constcharPtrWrap(models[i]), error); done: if (models) { @@ -2273,13 +2253,17 @@ libvirt_virConnectListDomainsID(PyObject *self ATTRIBUTE_UNUSED, py_retval = PyList_New(c_retval); if (ids) { - for (i = 0; i < c_retval; i++) { - PyList_SetItem(py_retval, i, libvirt_intWrap(ids[i])); - } + for (i = 0; i < c_retval; i++) + VIR_PY_LIST_SET_GOTO(py_retval, i, libvirt_intWrap(ids[i]), error); VIR_FREE(ids); } return py_retval; + + error: + VIR_FREE(ids); + Py_XDECREF(py_retval); + return NULL; } #if LIBVIR_CHECK_VERSION(0, 9, 13) @@ -2311,12 +2295,7 @@ libvirt_virConnectListAllDomains(PyObject *self ATTRIBUTE_UNUSED, goto cleanup; for (i = 0; i < c_retval; i++) { - if (!(tmp = libvirt_virDomainPtrWrap(doms[i])) || - PyList_SetItem(py_retval, i, tmp) < 0) { - Py_XDECREF(tmp); - Py_CLEAR(py_retval); - goto cleanup; - } + VIR_PY_LIST_SET_GOTO(py_retval, i, libvirt_virDomainPtrWrap(doms[i]), error); /* python steals the pointer */ doms[i] = NULL; } @@ -2327,6 +2306,10 @@ libvirt_virConnectListAllDomains(PyObject *self ATTRIBUTE_UNUSED, virDomainFree(doms[i]); VIR_FREE(doms); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } #endif /* LIBVIR_CHECK_VERSION(0, 9, 13) */ @@ -2369,9 +2352,9 @@ libvirt_virConnectListDefinedDomains(PyObject *self ATTRIBUTE_UNUSED, goto cleanup; if (names) { - for (i = 0; i < c_retval; i++) { - PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - } + for (i = 0; i < c_retval; i++) + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_constcharPtrWrap(names[i]), error); } cleanup: @@ -2380,6 +2363,10 @@ libvirt_virConnectListDefinedDomains(PyObject *self ATTRIBUTE_UNUSED, VIR_FREE(names); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } static PyObject * @@ -2421,20 +2408,18 @@ libvirt_virDomainSnapshotListNames(PyObject *self ATTRIBUTE_UNUSED, if (!py_retval) goto cleanup; - for (i = 0; i < c_retval; i++) { - if ((pyobj_snap = libvirt_constcharPtrWrap(names[i])) == NULL || - PyList_SetItem(py_retval, i, pyobj_snap) < 0) { - Py_XDECREF(pyobj_snap); - Py_CLEAR(py_retval); - goto cleanup; - } - } + for (i = 0; i < c_retval; i++) + VIR_PY_LIST_SET_GOTO(py_retval, i, libvirt_constcharPtrWrap(names[i]), error); cleanup: for (i = 0; i < c_retval; i++) VIR_FREE(names[i]); VIR_FREE(names); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } #if LIBVIR_CHECK_VERSION(0, 9, 13) @@ -2466,13 +2451,8 @@ libvirt_virDomainListAllSnapshots(PyObject *self ATTRIBUTE_UNUSED, goto cleanup; for (i = 0; i < c_retval; i++) { - if ((pyobj_snap = libvirt_virDomainSnapshotPtrWrap(snaps[i])) == NULL || - PyList_SetItem(py_retval, i, pyobj_snap) < 0) { - Py_XDECREF(pyobj_snap); - Py_CLEAR(py_retval); - goto cleanup; - } - snaps[i] = NULL; + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_virDomainSnapshotPtrWrap(snaps[i]), error); } cleanup: @@ -2481,6 +2461,10 @@ libvirt_virDomainListAllSnapshots(PyObject *self ATTRIBUTE_UNUSED, virDomainSnapshotFree(snaps[i]); VIR_FREE(snaps); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } #endif /* LIBVIR_CHECK_VERSION(0, 9, 13) */ @@ -2523,21 +2507,18 @@ libvirt_virDomainSnapshotListChildrenNames(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(c_retval)) == NULL) goto cleanup; - for (i = 0; i < c_retval; i++) { - if ((pyobj_snap = libvirt_constcharPtrWrap(names[i])) == NULL || - PyList_SetItem(py_retval, i, pyobj_snap) < 0) { - Py_XDECREF(pyobj_snap); - Py_CLEAR(py_retval); - goto cleanup; - } - VIR_FREE(names[i]); - } + for (i = 0; i < c_retval; i++) + VIR_PY_LIST_SET_GOTO(py_retval, i, libvirt_constcharPtrWrap(names[i]), error); cleanup: for (i = 0; i < c_retval; i++) VIR_FREE(names[i]); VIR_FREE(names); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } #if LIBVIR_CHECK_VERSION(0, 9, 13) @@ -2568,15 +2549,9 @@ libvirt_virDomainSnapshotListAllChildren(PyObject *self ATTRIBUTE_UNUSED, if (!(py_retval = PyList_New(c_retval))) goto cleanup; - for (i = 0; i < c_retval; i++) { - if ((pyobj_snap = libvirt_virDomainSnapshotPtrWrap(snaps[i])) == NULL || - PyList_SetItem(py_retval, i, pyobj_snap) < 0) { - Py_XDECREF(pyobj_snap); - Py_CLEAR(py_retval); - goto cleanup; - } - snaps[i] = NULL; - } + for (i = 0; i < c_retval; i++) + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_virDomainSnapshotPtrWrap(snaps[i]), error); cleanup: for (i = 0; i < c_retval; i++) @@ -2584,6 +2559,10 @@ libvirt_virDomainSnapshotListAllChildren(PyObject *self ATTRIBUTE_UNUSED, virDomainSnapshotFree(snaps[i]); VIR_FREE(snaps); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } #endif /* LIBVIR_CHECK_VERSION(0, 9, 13) */ @@ -2634,13 +2613,19 @@ libvirt_virDomainGetInfo(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(5)) == NULL) return NULL; - PyList_SetItem(py_retval, 0, libvirt_intWrap((int) info.state)); - PyList_SetItem(py_retval, 1, libvirt_ulongWrap(info.maxMem)); - PyList_SetItem(py_retval, 2, libvirt_ulongWrap(info.memory)); - PyList_SetItem(py_retval, 3, libvirt_intWrap((int) info.nrVirtCpu)); - PyList_SetItem(py_retval, 4, - libvirt_ulonglongWrap(info.cpuTime)); + VIR_PY_LIST_SET_GOTO(py_retval, 0, libvirt_intWrap((int) info.state), error); + VIR_PY_LIST_SET_GOTO(py_retval, 1, libvirt_ulongWrap(info.maxMem), error); + VIR_PY_LIST_SET_GOTO(py_retval, 2, libvirt_ulongWrap(info.memory), error); + VIR_PY_LIST_SET_GOTO(py_retval, 3, + libvirt_intWrap((int) info.nrVirtCpu), error); + VIR_PY_LIST_SET_GOTO(py_retval, 4, + libvirt_ulonglongWrap(info.cpuTime), error); + return py_retval; + + error: + Py_XDECREF(py_retval); + return NULL; } static PyObject * @@ -2670,9 +2655,14 @@ libvirt_virDomainGetState(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(2)) == NULL) return NULL; - PyList_SetItem(py_retval, 0, libvirt_intWrap(state)); - PyList_SetItem(py_retval, 1, libvirt_intWrap(reason)); + VIR_PY_LIST_SET_GOTO(py_retval, 0, libvirt_intWrap(state), error); + VIR_PY_LIST_SET_GOTO(py_retval, 1, libvirt_intWrap(reason), error); + return py_retval; + + error: + Py_XDECREF(py_retval); + return NULL; } static PyObject * @@ -2700,10 +2690,16 @@ libvirt_virDomainGetControlInfo(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(3)) == NULL) return NULL; - PyList_SetItem(py_retval, 0, libvirt_intWrap(info.state)); - PyList_SetItem(py_retval, 1, libvirt_intWrap(info.details)); - PyList_SetItem(py_retval, 2, libvirt_ulonglongWrap(info.stateTime)); + VIR_PY_LIST_SET_GOTO(py_retval, 0, libvirt_intWrap(info.state), error); + VIR_PY_LIST_SET_GOTO(py_retval, 1, libvirt_intWrap(info.details), error); + VIR_PY_LIST_SET_GOTO(py_retval, 2, + libvirt_ulonglongWrap(info.stateTime), error); + return py_retval; + + error: + Py_XDECREF(py_retval); + return NULL; } static PyObject * @@ -2732,10 +2728,18 @@ libvirt_virDomainGetBlockInfo(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(3)) == NULL) return NULL; - PyList_SetItem(py_retval, 0, libvirt_ulonglongWrap(info.capacity)); - PyList_SetItem(py_retval, 1, libvirt_ulonglongWrap(info.allocation)); - PyList_SetItem(py_retval, 2, libvirt_ulonglongWrap(info.physical)); + VIR_PY_LIST_SET_GOTO(py_retval, 0, + libvirt_ulonglongWrap(info.capacity), error); + VIR_PY_LIST_SET_GOTO(py_retval, 1, + libvirt_ulonglongWrap(info.allocation), error); + VIR_PY_LIST_SET_GOTO(py_retval, 2, + libvirt_ulonglongWrap(info.physical), error); + return py_retval; + + error: + Py_XDECREF(py_retval); + return NULL; } static PyObject * @@ -2761,15 +2765,22 @@ libvirt_virNodeGetInfo(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(8)) == NULL) return NULL; - PyList_SetItem(py_retval, 0, libvirt_constcharPtrWrap(&info.model[0])); - PyList_SetItem(py_retval, 1, libvirt_longWrap((long) info.memory >> 10)); - PyList_SetItem(py_retval, 2, libvirt_intWrap((int) info.cpus)); - PyList_SetItem(py_retval, 3, libvirt_intWrap((int) info.mhz)); - PyList_SetItem(py_retval, 4, libvirt_intWrap((int) info.nodes)); - PyList_SetItem(py_retval, 5, libvirt_intWrap((int) info.sockets)); - PyList_SetItem(py_retval, 6, libvirt_intWrap((int) info.cores)); - PyList_SetItem(py_retval, 7, libvirt_intWrap((int) info.threads)); + VIR_PY_LIST_SET_GOTO(py_retval, 0, + libvirt_constcharPtrWrap(&info.model[0]), error); + VIR_PY_LIST_SET_GOTO(py_retval, 1, + libvirt_longWrap((long) info.memory >> 10), error); + VIR_PY_LIST_SET_GOTO(py_retval, 2, libvirt_intWrap((int) info.cpus), error); + VIR_PY_LIST_SET_GOTO(py_retval, 3, libvirt_intWrap((int) info.mhz), error); + VIR_PY_LIST_SET_GOTO(py_retval, 4, libvirt_intWrap((int) info.nodes), error); + VIR_PY_LIST_SET_GOTO(py_retval, 5, libvirt_intWrap((int) info.sockets), error); + VIR_PY_LIST_SET_GOTO(py_retval, 6, libvirt_intWrap((int) info.cores), error); + VIR_PY_LIST_SET_GOTO(py_retval, 7, libvirt_intWrap((int) info.threads), error); + return py_retval; + + error: + Py_XDECREF(py_retval); + return NULL; } static PyObject * @@ -2796,9 +2807,16 @@ libvirt_virNodeGetSecurityModel(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(2)) == NULL) return NULL; - PyList_SetItem(py_retval, 0, libvirt_constcharPtrWrap(&model.model[0])); - PyList_SetItem(py_retval, 1, libvirt_constcharPtrWrap(&model.doi[0])); + VIR_PY_LIST_SET_GOTO(py_retval, 0, + libvirt_constcharPtrWrap(&model.model[0]), error); + VIR_PY_LIST_SET_GOTO(py_retval, 1, + libvirt_constcharPtrWrap(&model.doi[0]), error); + return py_retval; + + error: + Py_XDECREF(py_retval); + return NULL; } static PyObject * @@ -2825,9 +2843,16 @@ libvirt_virDomainGetSecurityLabel(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(2)) == NULL) return NULL; - PyList_SetItem(py_retval, 0, libvirt_constcharPtrWrap(&label.label[0])); - PyList_SetItem(py_retval, 1, libvirt_boolWrap(label.enforcing)); + VIR_PY_LIST_SET_GOTO(py_retval, 0, + libvirt_constcharPtrWrap(&label.label[0]), error); + VIR_PY_LIST_SET_GOTO(py_retval, 1, + libvirt_boolWrap(label.enforcing), error); + return py_retval; + + error: + Py_XDECREF(py_retval); + return NULL; } #if LIBVIR_CHECK_VERSION(0, 10, 0) @@ -2860,25 +2885,17 @@ libvirt_virDomainGetSecurityLabelList(PyObject *self ATTRIBUTE_UNUSED, for (i = 0 ; i < c_retval ; i++) { PyObject *entry; - PyObject *value; - if (!(entry = PyList_New(2)) || - PyList_Append(py_retval, entry) < 0) { - Py_XDECREF(entry); + if (!(entry = PyList_New(2))) goto error; - } - if (!(value = libvirt_constcharPtrWrap(&labels[i].label[0])) || - PyList_SetItem(entry, 0, value) < 0) { - Py_XDECREF(value); - goto error; - } + VIR_PY_LIST_APPEND_GOTO(py_retval, entry, error); - if (!(value = libvirt_boolWrap(labels[i].enforcing)) || - PyList_SetItem(entry, 1, value) < 0) { - Py_XDECREF(value); - goto error; - } + VIR_PY_LIST_SET_GOTO(entry, 0, + libvirt_constcharPtrWrap(&labels[i].label[0]), + error); + VIR_PY_LIST_SET_GOTO(entry, 1, + libvirt_boolWrap(labels[i].enforcing), error); } cleanup: @@ -3006,16 +3023,20 @@ libvirt_virConnectListNetworks(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(c_retval)) == NULL) goto cleanup; - if (names) { + if (names) for (i = 0; i < c_retval; i++) - PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - } + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_constcharPtrWrap(names[i]), error); cleanup: for (i = 0; i < c_retval; i++) VIR_FREE(names[i]); VIR_FREE(names); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } @@ -3057,16 +3078,19 @@ libvirt_virConnectListDefinedNetworks(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(c_retval)) == NULL) goto cleanup; - if (names) { - for (i = 0; i < c_retval; i++) - PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - } + for (i = 0; i < c_retval; i++) + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_constcharPtrWrap(names[i]), error); cleanup: for (i = 0; i < c_retval; i++) VIR_FREE(names[i]); VIR_FREE(names); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } #if LIBVIR_CHECK_VERSION(0, 10, 2) @@ -3097,16 +3121,9 @@ libvirt_virConnectListAllNetworks(PyObject *self ATTRIBUTE_UNUSED, if (!(py_retval = PyList_New(c_retval))) goto cleanup; - for (i = 0; i < c_retval; i++) { - if (!(tmp = libvirt_virNetworkPtrWrap(nets[i])) || - PyList_SetItem(py_retval, i, tmp) < 0) { - Py_XDECREF(tmp); - Py_CLEAR(py_retval); - goto cleanup; - } - /* python steals the pointer */ - nets[i] = NULL; - } + for (i = 0; i < c_retval; i++) + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_virNetworkPtrWrap(nets[i]), error); cleanup: for (i = 0; i < c_retval; i++) @@ -3114,6 +3131,10 @@ libvirt_virConnectListAllNetworks(PyObject *self ATTRIBUTE_UNUSED, virNetworkFree(nets[i]); VIR_FREE(nets); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } #endif /* LIBVIR_CHECK_VERSION(0, 10, 2) */ @@ -3278,14 +3299,17 @@ libvirt_virNodeGetCellsFreeMemory(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(c_retval)) == NULL) goto cleanup; - for (i = 0; i < c_retval; i++) { - PyList_SetItem(py_retval, i, - libvirt_ulonglongWrap(freeMems[i])); - } + for (i = 0; i < c_retval; i++) + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_ulonglongWrap(freeMems[i]), error); cleanup: VIR_FREE(freeMems); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } static PyObject * @@ -3455,16 +3479,19 @@ libvirt_virConnectListStoragePools(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(c_retval)) == NULL) goto cleanup; - if (names) { - for (i = 0; i < c_retval; i++) - PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - } + for (i = 0; i < c_retval; i++) + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_constcharPtrWrap(names[i]), error); cleanup: for (i = 0; i < c_retval; i++) VIR_FREE(names[i]); VIR_FREE(names); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } @@ -3507,7 +3534,8 @@ libvirt_virConnectListDefinedStoragePools(PyObject *self ATTRIBUTE_UNUSED, if (names) { for (i = 0; i < c_retval; i++) - PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_constcharPtrWrap(names[i]), error); } cleanup: @@ -3516,6 +3544,10 @@ libvirt_virConnectListDefinedStoragePools(PyObject *self ATTRIBUTE_UNUSED, VIR_FREE(names); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } #if LIBVIR_CHECK_VERSION(0, 10, 2) @@ -3547,12 +3579,8 @@ libvirt_virConnectListAllStoragePools(PyObject *self ATTRIBUTE_UNUSED, goto cleanup; for (i = 0; i < c_retval; i++) { - if (!(tmp = libvirt_virStoragePoolPtrWrap(pools[i])) || - PyList_SetItem(py_retval, i, tmp) < 0) { - Py_XDECREF(tmp); - Py_CLEAR(py_retval); - goto cleanup; - } + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_virStoragePoolPtrWrap(pools[i]), error); /* python steals the pointer */ pools[i] = NULL; } @@ -3563,6 +3591,10 @@ libvirt_virConnectListAllStoragePools(PyObject *self ATTRIBUTE_UNUSED, virStoragePoolFree(pools[i]); VIR_FREE(pools); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } #endif /* LIBVIR_CHECK_VERSION(0, 10, 2) */ @@ -3604,17 +3636,22 @@ libvirt_virStoragePoolListVolumes(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(c_retval)) == NULL) goto cleanup; - if (names) { + if (names) for (i = 0; i < c_retval; i++) - PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - } + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_constcharPtrWrap(names[i]), error); cleanup: - for (i = 0; i < c_retval; i++) - VIR_FREE(names[i]); - VIR_FREE(names); - + if (names) { + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); + VIR_FREE(names); + } return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } #if LIBVIR_CHECK_VERSION(0, 10, 2) @@ -3647,12 +3684,8 @@ libvirt_virStoragePoolListAllVolumes(PyObject *self ATTRIBUTE_UNUSED, goto cleanup; for (i = 0; i < c_retval; i++) { - if (!(tmp = libvirt_virStorageVolPtrWrap(vols[i])) || - PyList_SetItem(py_retval, i, tmp) < 0) { - Py_XDECREF(tmp); - Py_CLEAR(py_retval); - goto cleanup; - } + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_virStorageVolPtrWrap(vols[i]), error); /* python steals the pointer */ vols[i] = NULL; } @@ -3663,6 +3696,10 @@ libvirt_virStoragePoolListAllVolumes(PyObject *self ATTRIBUTE_UNUSED, virStorageVolFree(vols[i]); VIR_FREE(vols); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } #endif /* LIBVIR_CHECK_VERSION(0, 10, 2) */ @@ -3714,14 +3751,20 @@ libvirt_virStoragePoolGetInfo(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(4)) == NULL) return NULL; - PyList_SetItem(py_retval, 0, libvirt_intWrap((int) info.state)); - PyList_SetItem(py_retval, 1, - libvirt_ulonglongWrap(info.capacity)); - PyList_SetItem(py_retval, 2, - libvirt_ulonglongWrap(info.allocation)); - PyList_SetItem(py_retval, 3, - libvirt_ulonglongWrap(info.available)); + VIR_PY_LIST_SET_GOTO(py_retval, 0, + libvirt_intWrap((int) info.state), error); + VIR_PY_LIST_SET_GOTO(py_retval, 1, + libvirt_ulonglongWrap(info.capacity), error); + VIR_PY_LIST_SET_GOTO(py_retval, 2, + libvirt_ulonglongWrap(info.allocation), error); + VIR_PY_LIST_SET_GOTO(py_retval, 3, + libvirt_ulonglongWrap(info.available), error); + return py_retval; + + error: + Py_XDECREF(py_retval); + return NULL; } @@ -3748,12 +3791,18 @@ libvirt_virStorageVolGetInfo(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(3)) == NULL) return NULL; - PyList_SetItem(py_retval, 0, libvirt_intWrap((int) info.type)); - PyList_SetItem(py_retval, 1, - libvirt_ulonglongWrap(info.capacity)); - PyList_SetItem(py_retval, 2, - libvirt_ulonglongWrap(info.allocation)); + VIR_PY_LIST_SET_GOTO(py_retval, 0, + libvirt_intWrap((int) info.type), error); + VIR_PY_LIST_SET_GOTO(py_retval, 1, + libvirt_ulonglongWrap(info.capacity), error); + VIR_PY_LIST_SET_GOTO(py_retval, 2, + libvirt_ulonglongWrap(info.allocation), error); + return py_retval; + + error: + Py_DECREF(py_retval); + return NULL; } static PyObject * @@ -3873,16 +3922,20 @@ libvirt_virNodeListDevices(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(c_retval)) == NULL) goto cleanup; - if (names) { + if (names) for (i = 0; i < c_retval; i++) - PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - } + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_constcharPtrWrap(names[i]), error); cleanup: for (i = 0; i < c_retval; i++) VIR_FREE(names[i]); VIR_FREE(names); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } #if LIBVIR_CHECK_VERSION(0, 10, 2) @@ -3914,12 +3967,8 @@ libvirt_virConnectListAllNodeDevices(PyObject *self ATTRIBUTE_UNUSED, goto cleanup; for (i = 0; i < c_retval; i++) { - if (!(tmp = libvirt_virNodeDevicePtrWrap(devices[i])) || - PyList_SetItem(py_retval, i, tmp) < 0) { - Py_XDECREF(tmp); - Py_CLEAR(py_retval); - goto cleanup; - } + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_virNodeDevicePtrWrap(devices[i]), error); /* python steals the pointer */ devices[i] = NULL; } @@ -3930,6 +3979,10 @@ libvirt_virConnectListAllNodeDevices(PyObject *self ATTRIBUTE_UNUSED, virNodeDeviceFree(devices[i]); VIR_FREE(devices); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } #endif /* LIBVIR_CHECK_VERSION(0, 10, 2) */ @@ -3969,16 +4022,20 @@ libvirt_virNodeDeviceListCaps(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(c_retval)) == NULL) goto cleanup; - if (names) { + if (names) for (i = 0; i < c_retval; i++) - PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - } + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_constcharPtrWrap(names[i]), error); cleanup: for (i = 0; i < c_retval; i++) VIR_FREE(names[i]); VIR_FREE(names); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } static PyObject * @@ -4096,7 +4153,8 @@ libvirt_virConnectListSecrets(PyObject *self ATTRIBUTE_UNUSED, if (uuids) { for (i = 0; i < c_retval; i++) - PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(uuids[i])); + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_constcharPtrWrap(uuids[i]), error); } cleanup: @@ -4104,6 +4162,10 @@ libvirt_virConnectListSecrets(PyObject *self ATTRIBUTE_UNUSED, VIR_FREE(uuids[i]); VIR_FREE(uuids); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } #if LIBVIR_CHECK_VERSION(0, 10, 2) @@ -4135,12 +4197,8 @@ libvirt_virConnectListAllSecrets(PyObject *self ATTRIBUTE_UNUSED, goto cleanup; for (i = 0; i < c_retval; i++) { - if (!(tmp = libvirt_virSecretPtrWrap(secrets[i])) || - PyList_SetItem(py_retval, i, tmp) < 0) { - Py_XDECREF(tmp); - Py_CLEAR(py_retval); - goto cleanup; - } + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_virSecretPtrWrap(secrets[i]), error); /* python steals the pointer */ secrets[i] = NULL; } @@ -4151,6 +4209,10 @@ libvirt_virConnectListAllSecrets(PyObject *self ATTRIBUTE_UNUSED, virSecretFree(secrets[i]); VIR_FREE(secrets); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } #endif /* LIBVIR_CHECK_VERSION(0, 10, 2) */ @@ -4323,16 +4385,20 @@ libvirt_virConnectListNWFilters(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(c_retval)) == NULL) goto cleanup; - if (uuids) { + if (uuids) for (i = 0; i < c_retval; i++) - PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(uuids[i])); - } + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_constcharPtrWrap(uuids[i]), error); cleanup: for (i = 0; i < c_retval; i++) VIR_FREE(uuids[i]); VIR_FREE(uuids); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } #if LIBVIR_CHECK_VERSION(0, 10, 2) @@ -4364,12 +4430,8 @@ libvirt_virConnectListAllNWFilters(PyObject *self ATTRIBUTE_UNUSED, goto cleanup; for (i = 0; i < c_retval; i++) { - if (!(tmp = libvirt_virNWFilterPtrWrap(filters[i])) || - PyList_SetItem(py_retval, i, tmp) < 0) { - Py_XDECREF(tmp); - Py_CLEAR(py_retval); - goto cleanup; - } + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_virNWFilterPtrWrap(filters[i]), error); /* python steals the pointer */ filters[i] = NULL; } @@ -4380,6 +4442,10 @@ libvirt_virConnectListAllNWFilters(PyObject *self ATTRIBUTE_UNUSED, virNWFilterFree(filters[i]); VIR_FREE(filters); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } #endif /* LIBVIR_CHECK_VERSION(0, 10, 2) */ @@ -4422,16 +4488,20 @@ libvirt_virConnectListInterfaces(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(c_retval)) == NULL) goto cleanup; - if (names) { + if (names) for (i = 0; i < c_retval; i++) - PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - } + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_constcharPtrWrap(names[i]), error); cleanup: for (i = 0; i < c_retval; i++) VIR_FREE(names[i]); VIR_FREE(names); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } @@ -4476,7 +4546,8 @@ libvirt_virConnectListDefinedInterfaces(PyObject *self ATTRIBUTE_UNUSED, if (names) { for (i = 0; i < c_retval; i++) - PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_constcharPtrWrap(names[i]), error); } cleanup: @@ -4484,6 +4555,10 @@ libvirt_virConnectListDefinedInterfaces(PyObject *self ATTRIBUTE_UNUSED, VIR_FREE(names[i]); VIR_FREE(names); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } @@ -4516,12 +4591,8 @@ libvirt_virConnectListAllInterfaces(PyObject *self ATTRIBUTE_UNUSED, goto cleanup; for (i = 0; i < c_retval; i++) { - if (!(tmp = libvirt_virInterfacePtrWrap(ifaces[i])) || - PyList_SetItem(py_retval, i, tmp) < 0) { - Py_XDECREF(tmp); - Py_CLEAR(py_retval); - goto cleanup; - } + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_virInterfacePtrWrap(ifaces[i]), error); /* python steals the pointer */ ifaces[i] = NULL; } @@ -4532,6 +4603,10 @@ libvirt_virConnectListAllInterfaces(PyObject *self ATTRIBUTE_UNUSED, virInterfaceFree(ifaces[i]); VIR_FREE(ifaces); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } #endif /* LIBVIR_CHECK_VERSION(0, 10, 2) */ @@ -4612,20 +4687,36 @@ libvirt_virDomainGetJobInfo(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(12)) == NULL) return NULL; - PyList_SetItem(py_retval, 0, libvirt_intWrap((int) info.type)); - PyList_SetItem(py_retval, 1, libvirt_ulonglongWrap(info.timeElapsed)); - PyList_SetItem(py_retval, 2, libvirt_ulonglongWrap(info.timeRemaining)); - PyList_SetItem(py_retval, 3, libvirt_ulonglongWrap(info.dataTotal)); - PyList_SetItem(py_retval, 4, libvirt_ulonglongWrap(info.dataProcessed)); - PyList_SetItem(py_retval, 5, libvirt_ulonglongWrap(info.dataRemaining)); - PyList_SetItem(py_retval, 6, libvirt_ulonglongWrap(info.memTotal)); - PyList_SetItem(py_retval, 7, libvirt_ulonglongWrap(info.memProcessed)); - PyList_SetItem(py_retval, 8, libvirt_ulonglongWrap(info.memRemaining)); - PyList_SetItem(py_retval, 9, libvirt_ulonglongWrap(info.fileTotal)); - PyList_SetItem(py_retval, 10, libvirt_ulonglongWrap(info.fileProcessed)); - PyList_SetItem(py_retval, 11, libvirt_ulonglongWrap(info.fileRemaining)); + VIR_PY_LIST_SET_GOTO(py_retval, 0, + libvirt_intWrap((int) info.type), error); + VIR_PY_LIST_SET_GOTO(py_retval, 1, + libvirt_ulonglongWrap(info.timeElapsed), error); + VIR_PY_LIST_SET_GOTO(py_retval, 2, + libvirt_ulonglongWrap(info.timeRemaining), error); + VIR_PY_LIST_SET_GOTO(py_retval, 3, + libvirt_ulonglongWrap(info.dataTotal), error); + VIR_PY_LIST_SET_GOTO(py_retval, 4, + libvirt_ulonglongWrap(info.dataProcessed), error); + VIR_PY_LIST_SET_GOTO(py_retval, 5, + libvirt_ulonglongWrap(info.dataRemaining), error); + VIR_PY_LIST_SET_GOTO(py_retval, 6, + libvirt_ulonglongWrap(info.memTotal), error); + VIR_PY_LIST_SET_GOTO(py_retval, 7, + libvirt_ulonglongWrap(info.memProcessed), error); + VIR_PY_LIST_SET_GOTO(py_retval, 8, + libvirt_ulonglongWrap(info.memRemaining), error); + VIR_PY_LIST_SET_GOTO(py_retval, 9, + libvirt_ulonglongWrap(info.fileTotal), error); + VIR_PY_LIST_SET_GOTO(py_retval, 10, + libvirt_ulonglongWrap(info.fileProcessed), error); + VIR_PY_LIST_SET_GOTO(py_retval, 11, + libvirt_ulonglongWrap(info.fileRemaining), error); return py_retval; + + error: + Py_DECREF(py_retval); + return NULL; } #if LIBVIR_CHECK_VERSION(1, 0, 3) @@ -4984,10 +5075,7 @@ libvirt_virDomainInterfaceAddresses(PyObject *self ATTRIBUTE_UNUSED, if (!py_addr) goto error; - if (PyList_SetItem(py_addrs, j, py_addr) < 0) { - Py_DECREF(py_addr); - goto error; - } + VIR_PY_LIST_SET_GOTO(py_addrs, j, py_addr, error); if ((py_iname = libvirt_constcharPtrWrap("addr")) == NULL || (py_ivalue = libvirt_constcharPtrWrap(addr->addr)) == NULL || @@ -6114,7 +6202,7 @@ libvirt_virConnectDomainEventGraphicsCallback(virConnectPtr conn ATTRIBUTE_UNUSE if (pair == NULL) goto cleanup; - PyList_SetItem(pyobj_subject, i, pair); + VIR_PY_LIST_SET_GOTO(pyobj_subject, i, pair, cleanup); VIR_PY_TUPLE_SET_GOTO(pair, 0, libvirt_constcharPtrWrap(subject->identities[i].type), @@ -7682,12 +7770,9 @@ libvirt_virNodeGetCPUMap(PyObject *self ATTRIBUTE_UNUSED, VIR_PY_TUPLE_SET_GOTO(ret, 1, pycpumap, error); - for (i = 0; i < i_retval; i++) { - if ((pyused = PyBool_FromLong(VIR_CPU_USED(cpumap, i))) == NULL) - goto error; - if (PyList_SetItem(pycpumap, i, pyused) < 0) - goto error; - } + for (i = 0; i < i_retval; i++) + VIR_PY_LIST_SET_GOTO(pycpumap, i, + PyBool_FromLong(VIR_CPU_USED(cpumap, i)), error); /* 2: number of online CPUs */ VIR_PY_TUPLE_SET_GOTO(ret, 2, libvirt_uintWrap(online), error); @@ -8143,8 +8228,7 @@ libvirt_virNetworkGetDHCPLeases(PyObject *self ATTRIBUTE_UNUSED, if ((py_lease = PyDict_New()) == NULL) goto error; - if (PyList_SetItem(py_retval, i, py_lease) < 0) - goto error; + VIR_PY_LIST_SET_GOTO(py_retval, i, py_lease, error); #define VIR_SET_LEASE_ITEM(NAME, VALUE_OBJ_FUNC) \ do { \ @@ -8207,11 +8291,8 @@ convertDomainStatsRecord(virDomainStatsRecordPtr *records, if (!(py_record = PyTuple_New(2))) goto error; - if (PyList_SetItem(py_retval, i, py_record) < 0) - goto error; + VIR_PY_LIST_SET_GOTO(py_retval, i, py_record, error); - /* libvirt_virDomainPtrWrap steals the object */ - virDomainRef(records[i]->dom); VIR_PY_TUPLE_SET_GOTO(py_record, 0, libvirt_virDomainPtrWrap(records[i]->dom), error); @@ -8453,7 +8534,7 @@ libvirt_virDomainGetFSInfo(PyObject *self ATTRIBUTE_UNUSED, if (info == NULL) goto error; - PyList_SetItem(py_retval, i, info); + VIR_PY_LIST_SET_GOTO(py_retval, i, info, error); VIR_PY_TUPLE_SET_GOTO(info, 0, libvirt_constcharPtrWrap(fs->mountpoint), error); @@ -8468,9 +8549,9 @@ libvirt_virDomainGetFSInfo(PyObject *self ATTRIBUTE_UNUSED, VIR_PY_TUPLE_SET_GOTO(info, 3, alias, error); for (j = 0; j < fs->ndevAlias; j++) - if (PyList_Append(alias, - libvirt_constcharPtrWrap(fs->devAlias[j])) < 0) - goto error; + VIR_PY_LIST_APPEND_GOTO(alias, + libvirt_constcharPtrWrap(fs->devAlias[j]), + error); } cleanup: -- 2.5.3

On 09/24/2015 10:01 AM, Pavel Hrdina wrote:
Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-lxc-override.c | 13 +- libvirt-override.c | 615 ++++++++++++++++++++++++++++--------------------- 2 files changed, 350 insertions(+), 278 deletions(-)
Perhaps could have split these - just for sanity sake of reviewing, although it's obvious what the supermajority are...
diff --git a/libvirt-lxc-override.c b/libvirt-lxc-override.c index b0550c7..316a500 100644 --- a/libvirt-lxc-override.c +++ b/libvirt-lxc-override.c @@ -82,17 +82,8 @@ libvirt_lxc_virDomainLxcOpenNamespace(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(0)) == NULL) goto error;
- for (i = 0; i < c_retval; i++) { - PyObject *item = NULL; - - if ((item = libvirt_intWrap(fdlist[i])) == NULL) - goto error; - - if (PyList_Append(py_retval, item) < 0) { - Py_DECREF(item); - goto error; - } - } + for (i = 0; i < c_retval; i++) + VIR_PY_LIST_APPEND_GOTO(py_retval, libvirt_intWrap(fdlist[1]), error);
cleanup: VIR_FREE(fdlist); diff --git a/libvirt-override.c b/libvirt-override.c index c2e9fb9..1f795d9 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -250,15 +250,10 @@ libvirt_virDomainGetCPUStats(PyObject *self ATTRIBUTE_UNUSED,
for (i = 0; i < queried_ncpus; i++) { cpuparams = ¶ms[i * nparams]; - if ((cpu = getPyVirTypedParameter(cpuparams, i_retval)) == NULL) { - goto error; - } - - if (PyList_Append(ret, cpu) < 0) { - Py_DECREF(cpu); - goto error; - } - Py_DECREF(cpu); + VIR_PY_LIST_APPEND_GOTO(ret, + getPyVirTypedParameter(cpuparams, + i_retval), + error);
build issue 'cpu' no longer necessary
}
start_cpu += queried_ncpus; @@ -296,14 +291,8 @@ libvirt_virDomainGetCPUStats(PyObject *self ATTRIBUTE_UNUSED, i_retval = 0; }
- if ((total = getPyVirTypedParameter(params, i_retval)) == NULL) { - goto error; - } - if (PyList_Append(ret, total) < 0) { - Py_DECREF(total); - goto error; - } - Py_DECREF(total); + VIR_PY_LIST_APPEND_GOTO(ret, getPyVirTypedParameter(params, i_retval), + error);
build issue - 'total' no longer necessary
}
virTypedParamsFree(params, sumparams); @@ -1267,8 +1256,7 @@ libvirt_virDomainGetVcpus(PyObject *self ATTRIBUTE_UNUSED, if (info == NULL) goto cleanup;
- if (PyList_SetItem(pycpuinfo, i, info) < 0) - goto cleanup; + VIR_PY_LIST_SET_GOTO(pycpuinfo, i, info, cleanup);
VIR_PY_TUPLE_SET_GOTO(info, 0, libvirt_intWrap((long)cpuinfo[i].number), cleanup); @@ -1286,8 +1274,7 @@ libvirt_virDomainGetVcpus(PyObject *self ATTRIBUTE_UNUSED, if (info == NULL) goto cleanup;
- if (PyList_SetItem(pycpumap, i, info) < 0) - goto cleanup; + VIR_PY_LIST_SET_GOTO(pycpumap, i, info, cleanup);
for (j = 0; j < cpunum; j++) { VIR_PY_TUPLE_SET_GOTO(info, j, @@ -1488,7 +1475,7 @@ libvirt_virDomainGetVcpuPinInfo(PyObject *self ATTRIBUTE_UNUSED, if (mapinfo == NULL) goto cleanup;
- PyList_SetItem(pycpumaps, vcpu, mapinfo); + VIR_PY_LIST_SET_GOTO(pycpumaps, vcpu, mapinfo, cleanup);
for (pcpu = 0; pcpu < cpunum; pcpu++) { VIR_PY_TUPLE_SET_GOTO(mapinfo, @@ -1688,11 +1675,10 @@ libvirt_virDomainGetIOThreadInfo(PyObject *self ATTRIBUTE_UNUSED, goto cleanup; }
- if ((iothrtpl = PyTuple_New(2)) == NULL || - PyList_SetItem(py_iothrinfo, i, iothrtpl) < 0) { - Py_XDECREF(iothrtpl); + if ((iothrtpl = PyTuple_New(2)) == NULL) goto cleanup; - } + + VIR_PY_LIST_SET_GOTO(py_iothrinfo, i, iothrtpl, cleanup);
/* 0: IOThread ID */ VIR_PY_TUPLE_SET_GOTO(iothrtpl, 0, libvirt_uintWrap(iothr->iothread_id), @@ -1704,17 +1690,11 @@ libvirt_virDomainGetIOThreadInfo(PyObject *self ATTRIBUTE_UNUSED,
VIR_PY_TUPLE_SET_GOTO(iothrtpl, 1, iothrmap, cleanup);
- for (pcpu = 0; pcpu < cpunum; pcpu++) { - PyObject *pyused; - if ((pyused = PyBool_FromLong(VIR_CPU_USED(iothr->cpumap, - pcpu))) == NULL) { - goto cleanup; - } - if (PyList_SetItem(iothrmap, pcpu, pyused) < 0) { - Py_XDECREF(pyused); - goto cleanup; - } - } + for (pcpu = 0; pcpu < cpunum; pcpu++) + VIR_PY_LIST_SET_GOTO(iothrmap, pcpu, + PyBool_FromLong(VIR_CPU_USED(iothr->cpumap, + pcpu)), + cleanup); }
py_retval = py_iothrinfo; @@ -1994,21 +1974,26 @@ virConnectCredCallbackWrapper(virConnectCredentialPtr cred,
VIR_PY_TUPLE_SET_GOTO(pycred, i, pycreditem, cleanup);
- PyList_SetItem(pycreditem, 0, libvirt_intWrap((long) cred[i].type)); - PyList_SetItem(pycreditem, 1, libvirt_constcharPtrWrap(cred[i].prompt)); + VIR_PY_LIST_SET_GOTO(pycreditem, 0, + libvirt_intWrap((long)cred[i].type), cleanup); + VIR_PY_LIST_SET_GOTO(pycreditem, 1, + libvirt_constcharPtrWrap(cred[i].prompt), cleanup); + if (cred[i].challenge) { - PyList_SetItem(pycreditem, 2, - libvirt_constcharPtrWrap(cred[i].challenge)); + VIR_PY_LIST_SET_GOTO(pycreditem, 2, + libvirt_constcharPtrWrap(cred[i].challenge), + cleanup); } else { - PyList_SetItem(pycreditem, 2, VIR_PY_NONE); + VIR_PY_LIST_SET_GOTO(pycreditem, 2, VIR_PY_NONE, cleanup); } if (cred[i].defresult) { - PyList_SetItem(pycreditem, 3, - libvirt_constcharPtrWrap(cred[i].defresult)); + VIR_PY_LIST_SET_GOTO(pycreditem, 3, + libvirt_constcharPtrWrap(cred[i].defresult), + cleanup); } else { - PyList_SetItem(pycreditem, 3, VIR_PY_NONE); + VIR_PY_LIST_SET_GOTO(pycreditem, 3, VIR_PY_NONE, cleanup); } - PyList_SetItem(pycreditem, 4, VIR_PY_NONE); + VIR_PY_LIST_SET_GOTO(pycreditem, 4, VIR_PY_NONE, cleanup); }
Py_XINCREF(pycbdata); @@ -2188,13 +2173,8 @@ libvirt_virConnectGetCPUModelNames(PyObject *self ATTRIBUTE_UNUSED, if ((rv = PyList_New(c_retval)) == NULL) goto error;
- for (i = 0; i < c_retval; i++) { - PyObject *str; - if ((str = libvirt_constcharPtrWrap(models[i])) == NULL) - goto error; - - PyList_SET_ITEM(rv, i, str); - } + for (i = 0; i < c_retval; i++) + VIR_PY_LIST_SET_GOTO(rv, i, libvirt_constcharPtrWrap(models[i]), error);
done: if (models) { @@ -2273,13 +2253,17 @@ libvirt_virConnectListDomainsID(PyObject *self ATTRIBUTE_UNUSED, py_retval = PyList_New(c_retval);
if (ids) { - for (i = 0; i < c_retval; i++) { - PyList_SetItem(py_retval, i, libvirt_intWrap(ids[i])); - } + for (i = 0; i < c_retval; i++) + VIR_PY_LIST_SET_GOTO(py_retval, i, libvirt_intWrap(ids[i]), error); VIR_FREE(ids); }
return py_retval; + + error: + VIR_FREE(ids); + Py_XDECREF(py_retval); + return NULL; }
#if LIBVIR_CHECK_VERSION(0, 9, 13) @@ -2311,12 +2295,7 @@ libvirt_virConnectListAllDomains(PyObject *self ATTRIBUTE_UNUSED, goto cleanup;
for (i = 0; i < c_retval; i++) { - if (!(tmp = libvirt_virDomainPtrWrap(doms[i])) || - PyList_SetItem(py_retval, i, tmp) < 0) { - Py_XDECREF(tmp); - Py_CLEAR(py_retval); - goto cleanup; - }
build issue - 'tmp' no longer necessary
+ VIR_PY_LIST_SET_GOTO(py_retval, i, libvirt_virDomainPtrWrap(doms[i]), error); /* python steals the pointer */ doms[i] = NULL; } @@ -2327,6 +2306,10 @@ libvirt_virConnectListAllDomains(PyObject *self ATTRIBUTE_UNUSED, virDomainFree(doms[i]); VIR_FREE(doms); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } #endif /* LIBVIR_CHECK_VERSION(0, 9, 13) */
@@ -2369,9 +2352,9 @@ libvirt_virConnectListDefinedDomains(PyObject *self ATTRIBUTE_UNUSED, goto cleanup;
if (names) { - for (i = 0; i < c_retval; i++) { - PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - } + for (i = 0; i < c_retval; i++) + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_constcharPtrWrap(names[i]), error); }
cleanup: @@ -2380,6 +2363,10 @@ libvirt_virConnectListDefinedDomains(PyObject *self ATTRIBUTE_UNUSED, VIR_FREE(names);
return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; }
static PyObject * @@ -2421,20 +2408,18 @@ libvirt_virDomainSnapshotListNames(PyObject *self ATTRIBUTE_UNUSED, if (!py_retval) goto cleanup;
- for (i = 0; i < c_retval; i++) { - if ((pyobj_snap = libvirt_constcharPtrWrap(names[i])) == NULL || - PyList_SetItem(py_retval, i, pyobj_snap) < 0) { - Py_XDECREF(pyobj_snap); - Py_CLEAR(py_retval); - goto cleanup; - } - } + for (i = 0; i < c_retval; i++) + VIR_PY_LIST_SET_GOTO(py_retval, i, libvirt_constcharPtrWrap(names[i]), error);
Build issue - 'pyobj_snap' no longer necessary
cleanup: for (i = 0; i < c_retval; i++) VIR_FREE(names[i]); VIR_FREE(names); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; }
#if LIBVIR_CHECK_VERSION(0, 9, 13) @@ -2466,13 +2451,8 @@ libvirt_virDomainListAllSnapshots(PyObject *self ATTRIBUTE_UNUSED, goto cleanup;
for (i = 0; i < c_retval; i++) { - if ((pyobj_snap = libvirt_virDomainSnapshotPtrWrap(snaps[i])) == NULL || - PyList_SetItem(py_retval, i, pyobj_snap) < 0) { - Py_XDECREF(pyobj_snap); - Py_CLEAR(py_retval); - goto cleanup; - } - snaps[i] = NULL; + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_virDomainSnapshotPtrWrap(snaps[i]), error);
Build issue - 'pyobj_snap' no longer necessary
}
cleanup: @@ -2481,6 +2461,10 @@ libvirt_virDomainListAllSnapshots(PyObject *self ATTRIBUTE_UNUSED, virDomainSnapshotFree(snaps[i]); VIR_FREE(snaps); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } #endif /* LIBVIR_CHECK_VERSION(0, 9, 13) */
@@ -2523,21 +2507,18 @@ libvirt_virDomainSnapshotListChildrenNames(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(c_retval)) == NULL) goto cleanup;
- for (i = 0; i < c_retval; i++) { - if ((pyobj_snap = libvirt_constcharPtrWrap(names[i])) == NULL || - PyList_SetItem(py_retval, i, pyobj_snap) < 0) { - Py_XDECREF(pyobj_snap); - Py_CLEAR(py_retval); - goto cleanup; - } - VIR_FREE(names[i]); - } + for (i = 0; i < c_retval; i++) + VIR_PY_LIST_SET_GOTO(py_retval, i, libvirt_constcharPtrWrap(names[i]), error);
cleanup: for (i = 0; i < c_retval; i++) VIR_FREE(names[i]); VIR_FREE(names); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; }
#if LIBVIR_CHECK_VERSION(0, 9, 13) @@ -2568,15 +2549,9 @@ libvirt_virDomainSnapshotListAllChildren(PyObject *self ATTRIBUTE_UNUSED, if (!(py_retval = PyList_New(c_retval))) goto cleanup;
- for (i = 0; i < c_retval; i++) { - if ((pyobj_snap = libvirt_virDomainSnapshotPtrWrap(snaps[i])) == NULL || - PyList_SetItem(py_retval, i, pyobj_snap) < 0) { - Py_XDECREF(pyobj_snap); - Py_CLEAR(py_retval); - goto cleanup; - } - snaps[i] = NULL; - } + for (i = 0; i < c_retval; i++) + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_virDomainSnapshotPtrWrap(snaps[i]), error);
Build issue - 'pyobj_snap' no longer necessary
cleanup: for (i = 0; i < c_retval; i++) @@ -2584,6 +2559,10 @@ libvirt_virDomainSnapshotListAllChildren(PyObject *self ATTRIBUTE_UNUSED, virDomainSnapshotFree(snaps[i]); VIR_FREE(snaps); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } #endif /* LIBVIR_CHECK_VERSION(0, 9, 13) */
@@ -2634,13 +2613,19 @@ libvirt_virDomainGetInfo(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(5)) == NULL) return NULL;
- PyList_SetItem(py_retval, 0, libvirt_intWrap((int) info.state)); - PyList_SetItem(py_retval, 1, libvirt_ulongWrap(info.maxMem)); - PyList_SetItem(py_retval, 2, libvirt_ulongWrap(info.memory)); - PyList_SetItem(py_retval, 3, libvirt_intWrap((int) info.nrVirtCpu)); - PyList_SetItem(py_retval, 4, - libvirt_ulonglongWrap(info.cpuTime)); + VIR_PY_LIST_SET_GOTO(py_retval, 0, libvirt_intWrap((int) info.state), error); + VIR_PY_LIST_SET_GOTO(py_retval, 1, libvirt_ulongWrap(info.maxMem), error); + VIR_PY_LIST_SET_GOTO(py_retval, 2, libvirt_ulongWrap(info.memory), error); + VIR_PY_LIST_SET_GOTO(py_retval, 3, + libvirt_intWrap((int) info.nrVirtCpu), error); + VIR_PY_LIST_SET_GOTO(py_retval, 4, + libvirt_ulonglongWrap(info.cpuTime), error); + return py_retval; + + error: + Py_XDECREF(py_retval); + return NULL; }
static PyObject * @@ -2670,9 +2655,14 @@ libvirt_virDomainGetState(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(2)) == NULL) return NULL;
- PyList_SetItem(py_retval, 0, libvirt_intWrap(state)); - PyList_SetItem(py_retval, 1, libvirt_intWrap(reason)); + VIR_PY_LIST_SET_GOTO(py_retval, 0, libvirt_intWrap(state), error); + VIR_PY_LIST_SET_GOTO(py_retval, 1, libvirt_intWrap(reason), error); + return py_retval; + + error: + Py_XDECREF(py_retval); + return NULL; }
static PyObject * @@ -2700,10 +2690,16 @@ libvirt_virDomainGetControlInfo(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(3)) == NULL) return NULL;
- PyList_SetItem(py_retval, 0, libvirt_intWrap(info.state)); - PyList_SetItem(py_retval, 1, libvirt_intWrap(info.details)); - PyList_SetItem(py_retval, 2, libvirt_ulonglongWrap(info.stateTime)); + VIR_PY_LIST_SET_GOTO(py_retval, 0, libvirt_intWrap(info.state), error); + VIR_PY_LIST_SET_GOTO(py_retval, 1, libvirt_intWrap(info.details), error); + VIR_PY_LIST_SET_GOTO(py_retval, 2, + libvirt_ulonglongWrap(info.stateTime), error); + return py_retval; + + error: + Py_XDECREF(py_retval); + return NULL; }
static PyObject * @@ -2732,10 +2728,18 @@ libvirt_virDomainGetBlockInfo(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(3)) == NULL) return NULL;
- PyList_SetItem(py_retval, 0, libvirt_ulonglongWrap(info.capacity)); - PyList_SetItem(py_retval, 1, libvirt_ulonglongWrap(info.allocation)); - PyList_SetItem(py_retval, 2, libvirt_ulonglongWrap(info.physical)); + VIR_PY_LIST_SET_GOTO(py_retval, 0, + libvirt_ulonglongWrap(info.capacity), error); + VIR_PY_LIST_SET_GOTO(py_retval, 1, + libvirt_ulonglongWrap(info.allocation), error); + VIR_PY_LIST_SET_GOTO(py_retval, 2, + libvirt_ulonglongWrap(info.physical), error); + return py_retval; + + error: + Py_XDECREF(py_retval); + return NULL; }
static PyObject * @@ -2761,15 +2765,22 @@ libvirt_virNodeGetInfo(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(8)) == NULL) return NULL;
- PyList_SetItem(py_retval, 0, libvirt_constcharPtrWrap(&info.model[0])); - PyList_SetItem(py_retval, 1, libvirt_longWrap((long) info.memory >> 10)); - PyList_SetItem(py_retval, 2, libvirt_intWrap((int) info.cpus)); - PyList_SetItem(py_retval, 3, libvirt_intWrap((int) info.mhz)); - PyList_SetItem(py_retval, 4, libvirt_intWrap((int) info.nodes)); - PyList_SetItem(py_retval, 5, libvirt_intWrap((int) info.sockets)); - PyList_SetItem(py_retval, 6, libvirt_intWrap((int) info.cores)); - PyList_SetItem(py_retval, 7, libvirt_intWrap((int) info.threads)); + VIR_PY_LIST_SET_GOTO(py_retval, 0, + libvirt_constcharPtrWrap(&info.model[0]), error); + VIR_PY_LIST_SET_GOTO(py_retval, 1, + libvirt_longWrap((long) info.memory >> 10), error); + VIR_PY_LIST_SET_GOTO(py_retval, 2, libvirt_intWrap((int) info.cpus), error); + VIR_PY_LIST_SET_GOTO(py_retval, 3, libvirt_intWrap((int) info.mhz), error); + VIR_PY_LIST_SET_GOTO(py_retval, 4, libvirt_intWrap((int) info.nodes), error); + VIR_PY_LIST_SET_GOTO(py_retval, 5, libvirt_intWrap((int) info.sockets), error); + VIR_PY_LIST_SET_GOTO(py_retval, 6, libvirt_intWrap((int) info.cores), error); + VIR_PY_LIST_SET_GOTO(py_retval, 7, libvirt_intWrap((int) info.threads), error); + return py_retval; + + error: + Py_XDECREF(py_retval); + return NULL; }
static PyObject * @@ -2796,9 +2807,16 @@ libvirt_virNodeGetSecurityModel(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(2)) == NULL) return NULL;
- PyList_SetItem(py_retval, 0, libvirt_constcharPtrWrap(&model.model[0])); - PyList_SetItem(py_retval, 1, libvirt_constcharPtrWrap(&model.doi[0])); + VIR_PY_LIST_SET_GOTO(py_retval, 0, + libvirt_constcharPtrWrap(&model.model[0]), error); + VIR_PY_LIST_SET_GOTO(py_retval, 1, + libvirt_constcharPtrWrap(&model.doi[0]), error); + return py_retval; + + error: + Py_XDECREF(py_retval); + return NULL; }
static PyObject * @@ -2825,9 +2843,16 @@ libvirt_virDomainGetSecurityLabel(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(2)) == NULL) return NULL;
- PyList_SetItem(py_retval, 0, libvirt_constcharPtrWrap(&label.label[0])); - PyList_SetItem(py_retval, 1, libvirt_boolWrap(label.enforcing)); + VIR_PY_LIST_SET_GOTO(py_retval, 0, + libvirt_constcharPtrWrap(&label.label[0]), error); + VIR_PY_LIST_SET_GOTO(py_retval, 1, + libvirt_boolWrap(label.enforcing), error); + return py_retval; + + error: + Py_XDECREF(py_retval); + return NULL; }
#if LIBVIR_CHECK_VERSION(0, 10, 0) @@ -2860,25 +2885,17 @@ libvirt_virDomainGetSecurityLabelList(PyObject *self ATTRIBUTE_UNUSED,
for (i = 0 ; i < c_retval ; i++) { PyObject *entry; - PyObject *value;
- if (!(entry = PyList_New(2)) || - PyList_Append(py_retval, entry) < 0) { - Py_XDECREF(entry); + if (!(entry = PyList_New(2))) goto error; - }
- if (!(value = libvirt_constcharPtrWrap(&labels[i].label[0])) || - PyList_SetItem(entry, 0, value) < 0) { - Py_XDECREF(value); - goto error; - } + VIR_PY_LIST_APPEND_GOTO(py_retval, entry, error);
- if (!(value = libvirt_boolWrap(labels[i].enforcing)) || - PyList_SetItem(entry, 1, value) < 0) { - Py_XDECREF(value); - goto error; - } + VIR_PY_LIST_SET_GOTO(entry, 0, + libvirt_constcharPtrWrap(&labels[i].label[0]), + error); + VIR_PY_LIST_SET_GOTO(entry, 1, + libvirt_boolWrap(labels[i].enforcing), error); }
cleanup: @@ -3006,16 +3023,20 @@ libvirt_virConnectListNetworks(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(c_retval)) == NULL) goto cleanup;
- if (names) { + if (names) for (i = 0; i < c_retval; i++) - PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - } + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_constcharPtrWrap(names[i]), error);
I perhaps would have kept the open/close paren's here. I could have missed others before here, this just jumped out at me. If it was just "if (foo) bar;", then fine, but this is "if (foo) for (cond) bar", so there's 3 lines...
cleanup: for (i = 0; i < c_retval; i++) VIR_FREE(names[i]); VIR_FREE(names); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; }
@@ -3057,16 +3078,19 @@ libvirt_virConnectListDefinedNetworks(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(c_retval)) == NULL) goto cleanup;
- if (names) { - for (i = 0; i < c_retval; i++) - PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - } + for (i = 0; i < c_retval; i++) + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_constcharPtrWrap(names[i]), error);
cleanup: for (i = 0; i < c_retval; i++) VIR_FREE(names[i]); VIR_FREE(names); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; }
#if LIBVIR_CHECK_VERSION(0, 10, 2) @@ -3097,16 +3121,9 @@ libvirt_virConnectListAllNetworks(PyObject *self ATTRIBUTE_UNUSED, if (!(py_retval = PyList_New(c_retval))) goto cleanup;
- for (i = 0; i < c_retval; i++) { - if (!(tmp = libvirt_virNetworkPtrWrap(nets[i])) || - PyList_SetItem(py_retval, i, tmp) < 0) { - Py_XDECREF(tmp); - Py_CLEAR(py_retval); - goto cleanup; - } - /* python steals the pointer */ - nets[i] = NULL; - } + for (i = 0; i < c_retval; i++) + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_virNetworkPtrWrap(nets[i]), error);
build issue - 'tmp' no longer necessary
cleanup: for (i = 0; i < c_retval; i++) @@ -3114,6 +3131,10 @@ libvirt_virConnectListAllNetworks(PyObject *self ATTRIBUTE_UNUSED, virNetworkFree(nets[i]); VIR_FREE(nets); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } #endif /* LIBVIR_CHECK_VERSION(0, 10, 2) */
@@ -3278,14 +3299,17 @@ libvirt_virNodeGetCellsFreeMemory(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(c_retval)) == NULL) goto cleanup;
- for (i = 0; i < c_retval; i++) { - PyList_SetItem(py_retval, i, - libvirt_ulonglongWrap(freeMems[i])); - } + for (i = 0; i < c_retval; i++) + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_ulonglongWrap(freeMems[i]), error);
cleanup: VIR_FREE(freeMems); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; }
static PyObject * @@ -3455,16 +3479,19 @@ libvirt_virConnectListStoragePools(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(c_retval)) == NULL) goto cleanup;
- if (names) { - for (i = 0; i < c_retval; i++) - PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - } + for (i = 0; i < c_retval; i++) + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_constcharPtrWrap(names[i]), error);
cleanup: for (i = 0; i < c_retval; i++) VIR_FREE(names[i]); VIR_FREE(names); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; }
@@ -3507,7 +3534,8 @@ libvirt_virConnectListDefinedStoragePools(PyObject *self ATTRIBUTE_UNUSED,
if (names) { for (i = 0; i < c_retval; i++) - PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_constcharPtrWrap(names[i]), error); }
cleanup: @@ -3516,6 +3544,10 @@ libvirt_virConnectListDefinedStoragePools(PyObject *self ATTRIBUTE_UNUSED, VIR_FREE(names);
return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; }
#if LIBVIR_CHECK_VERSION(0, 10, 2) @@ -3547,12 +3579,8 @@ libvirt_virConnectListAllStoragePools(PyObject *self ATTRIBUTE_UNUSED, goto cleanup;
for (i = 0; i < c_retval; i++) { - if (!(tmp = libvirt_virStoragePoolPtrWrap(pools[i])) || - PyList_SetItem(py_retval, i, tmp) < 0) { - Py_XDECREF(tmp); - Py_CLEAR(py_retval); - goto cleanup; - } + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_virStoragePoolPtrWrap(pools[i]), error);
build issue - 'tmp' no longer necessary
/* python steals the pointer */ pools[i] = NULL; } @@ -3563,6 +3591,10 @@ libvirt_virConnectListAllStoragePools(PyObject *self ATTRIBUTE_UNUSED, virStoragePoolFree(pools[i]); VIR_FREE(pools); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } #endif /* LIBVIR_CHECK_VERSION(0, 10, 2) */
@@ -3604,17 +3636,22 @@ libvirt_virStoragePoolListVolumes(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(c_retval)) == NULL) goto cleanup;
- if (names) { + if (names) for (i = 0; i < c_retval; i++) - PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - } + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_constcharPtrWrap(names[i]), error);
cleanup: - for (i = 0; i < c_retval; i++) - VIR_FREE(names[i]); - VIR_FREE(names); - + if (names) { + for (i = 0; i < c_retval; i++) + VIR_FREE(names[i]); + VIR_FREE(names); + }
Ohhh - this perhaps make a previous comment unimportant, but certainly shows why I mentioned it. Please just check other changes to make sure a similar construct is not necessary
return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; }
#if LIBVIR_CHECK_VERSION(0, 10, 2) @@ -3647,12 +3684,8 @@ libvirt_virStoragePoolListAllVolumes(PyObject *self ATTRIBUTE_UNUSED, goto cleanup;
for (i = 0; i < c_retval; i++) { - if (!(tmp = libvirt_virStorageVolPtrWrap(vols[i])) || - PyList_SetItem(py_retval, i, tmp) < 0) { - Py_XDECREF(tmp); - Py_CLEAR(py_retval); - goto cleanup; - } + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_virStorageVolPtrWrap(vols[i]), error);
build issue - 'tmp' no longer necessary
/* python steals the pointer */ vols[i] = NULL; } @@ -3663,6 +3696,10 @@ libvirt_virStoragePoolListAllVolumes(PyObject *self ATTRIBUTE_UNUSED, virStorageVolFree(vols[i]); VIR_FREE(vols); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } #endif /* LIBVIR_CHECK_VERSION(0, 10, 2) */
@@ -3714,14 +3751,20 @@ libvirt_virStoragePoolGetInfo(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(4)) == NULL) return NULL;
- PyList_SetItem(py_retval, 0, libvirt_intWrap((int) info.state)); - PyList_SetItem(py_retval, 1, - libvirt_ulonglongWrap(info.capacity)); - PyList_SetItem(py_retval, 2, - libvirt_ulonglongWrap(info.allocation)); - PyList_SetItem(py_retval, 3, - libvirt_ulonglongWrap(info.available)); + VIR_PY_LIST_SET_GOTO(py_retval, 0, + libvirt_intWrap((int) info.state), error); + VIR_PY_LIST_SET_GOTO(py_retval, 1, + libvirt_ulonglongWrap(info.capacity), error); + VIR_PY_LIST_SET_GOTO(py_retval, 2, + libvirt_ulonglongWrap(info.allocation), error); + VIR_PY_LIST_SET_GOTO(py_retval, 3, + libvirt_ulonglongWrap(info.available), error); + return py_retval; + + error: + Py_XDECREF(py_retval); + return NULL; }
@@ -3748,12 +3791,18 @@ libvirt_virStorageVolGetInfo(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(3)) == NULL) return NULL;
- PyList_SetItem(py_retval, 0, libvirt_intWrap((int) info.type)); - PyList_SetItem(py_retval, 1, - libvirt_ulonglongWrap(info.capacity)); - PyList_SetItem(py_retval, 2, - libvirt_ulonglongWrap(info.allocation)); + VIR_PY_LIST_SET_GOTO(py_retval, 0, + libvirt_intWrap((int) info.type), error); + VIR_PY_LIST_SET_GOTO(py_retval, 1, + libvirt_ulonglongWrap(info.capacity), error); + VIR_PY_LIST_SET_GOTO(py_retval, 2, + libvirt_ulonglongWrap(info.allocation), error); + return py_retval; + + error: + Py_DECREF(py_retval); + return NULL; }
static PyObject * @@ -3873,16 +3922,20 @@ libvirt_virNodeListDevices(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(c_retval)) == NULL) goto cleanup;
- if (names) { + if (names) for (i = 0; i < c_retval; i++) - PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - } + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_constcharPtrWrap(names[i]), error);
cleanup: for (i = 0; i < c_retval; i++) VIR_FREE(names[i]); VIR_FREE(names); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; }
#if LIBVIR_CHECK_VERSION(0, 10, 2) @@ -3914,12 +3967,8 @@ libvirt_virConnectListAllNodeDevices(PyObject *self ATTRIBUTE_UNUSED, goto cleanup;
for (i = 0; i < c_retval; i++) { - if (!(tmp = libvirt_virNodeDevicePtrWrap(devices[i])) || - PyList_SetItem(py_retval, i, tmp) < 0) { - Py_XDECREF(tmp); - Py_CLEAR(py_retval); - goto cleanup; - } + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_virNodeDevicePtrWrap(devices[i]), error);
build issue - 'tmp' no longer necessary
/* python steals the pointer */ devices[i] = NULL; } @@ -3930,6 +3979,10 @@ libvirt_virConnectListAllNodeDevices(PyObject *self ATTRIBUTE_UNUSED, virNodeDeviceFree(devices[i]); VIR_FREE(devices); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } #endif /* LIBVIR_CHECK_VERSION(0, 10, 2) */
@@ -3969,16 +4022,20 @@ libvirt_virNodeDeviceListCaps(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(c_retval)) == NULL) goto cleanup;
- if (names) { + if (names) for (i = 0; i < c_retval; i++) - PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - } + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_constcharPtrWrap(names[i]), error);
cleanup: for (i = 0; i < c_retval; i++) VIR_FREE(names[i]); VIR_FREE(names); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; }
static PyObject * @@ -4096,7 +4153,8 @@ libvirt_virConnectListSecrets(PyObject *self ATTRIBUTE_UNUSED,
if (uuids) { for (i = 0; i < c_retval; i++) - PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(uuids[i])); + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_constcharPtrWrap(uuids[i]), error); }
cleanup: @@ -4104,6 +4162,10 @@ libvirt_virConnectListSecrets(PyObject *self ATTRIBUTE_UNUSED, VIR_FREE(uuids[i]); VIR_FREE(uuids); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; }
#if LIBVIR_CHECK_VERSION(0, 10, 2) @@ -4135,12 +4197,8 @@ libvirt_virConnectListAllSecrets(PyObject *self ATTRIBUTE_UNUSED, goto cleanup;
for (i = 0; i < c_retval; i++) { - if (!(tmp = libvirt_virSecretPtrWrap(secrets[i])) || - PyList_SetItem(py_retval, i, tmp) < 0) { - Py_XDECREF(tmp); - Py_CLEAR(py_retval); - goto cleanup; - } + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_virSecretPtrWrap(secrets[i]), error);
build issue - 'tmp' no longer necessary
/* python steals the pointer */ secrets[i] = NULL; } @@ -4151,6 +4209,10 @@ libvirt_virConnectListAllSecrets(PyObject *self ATTRIBUTE_UNUSED, virSecretFree(secrets[i]); VIR_FREE(secrets); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } #endif /* LIBVIR_CHECK_VERSION(0, 10, 2) */
@@ -4323,16 +4385,20 @@ libvirt_virConnectListNWFilters(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(c_retval)) == NULL) goto cleanup;
- if (uuids) { + if (uuids) for (i = 0; i < c_retval; i++) - PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(uuids[i])); - } + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_constcharPtrWrap(uuids[i]), error);
cleanup: for (i = 0; i < c_retval; i++) VIR_FREE(uuids[i]); VIR_FREE(uuids); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; }
#if LIBVIR_CHECK_VERSION(0, 10, 2) @@ -4364,12 +4430,8 @@ libvirt_virConnectListAllNWFilters(PyObject *self ATTRIBUTE_UNUSED, goto cleanup;
for (i = 0; i < c_retval; i++) { - if (!(tmp = libvirt_virNWFilterPtrWrap(filters[i])) || - PyList_SetItem(py_retval, i, tmp) < 0) { - Py_XDECREF(tmp); - Py_CLEAR(py_retval); - goto cleanup; - } + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_virNWFilterPtrWrap(filters[i]), error);
build issue - 'tmp' no longer necessary
/* python steals the pointer */ filters[i] = NULL; } @@ -4380,6 +4442,10 @@ libvirt_virConnectListAllNWFilters(PyObject *self ATTRIBUTE_UNUSED, virNWFilterFree(filters[i]); VIR_FREE(filters); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } #endif /* LIBVIR_CHECK_VERSION(0, 10, 2) */
@@ -4422,16 +4488,20 @@ libvirt_virConnectListInterfaces(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(c_retval)) == NULL) goto cleanup;
- if (names) { + if (names) for (i = 0; i < c_retval; i++) - PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); - } + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_constcharPtrWrap(names[i]), error);
cleanup: for (i = 0; i < c_retval; i++) VIR_FREE(names[i]); VIR_FREE(names); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; }
@@ -4476,7 +4546,8 @@ libvirt_virConnectListDefinedInterfaces(PyObject *self ATTRIBUTE_UNUSED,
if (names) { for (i = 0; i < c_retval; i++) - PyList_SetItem(py_retval, i, libvirt_constcharPtrWrap(names[i])); + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_constcharPtrWrap(names[i]), error); }
cleanup: @@ -4484,6 +4555,10 @@ libvirt_virConnectListDefinedInterfaces(PyObject *self ATTRIBUTE_UNUSED, VIR_FREE(names[i]); VIR_FREE(names); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; }
@@ -4516,12 +4591,8 @@ libvirt_virConnectListAllInterfaces(PyObject *self ATTRIBUTE_UNUSED, goto cleanup;
for (i = 0; i < c_retval; i++) { - if (!(tmp = libvirt_virInterfacePtrWrap(ifaces[i])) || - PyList_SetItem(py_retval, i, tmp) < 0) { - Py_XDECREF(tmp); - Py_CLEAR(py_retval); - goto cleanup; - } + VIR_PY_LIST_SET_GOTO(py_retval, i, + libvirt_virInterfacePtrWrap(ifaces[i]), error);
build issue - 'tmp' no longer necessary
/* python steals the pointer */ ifaces[i] = NULL; } @@ -4532,6 +4603,10 @@ libvirt_virConnectListAllInterfaces(PyObject *self ATTRIBUTE_UNUSED, virInterfaceFree(ifaces[i]); VIR_FREE(ifaces); return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } #endif /* LIBVIR_CHECK_VERSION(0, 10, 2) */
@@ -4612,20 +4687,36 @@ libvirt_virDomainGetJobInfo(PyObject *self ATTRIBUTE_UNUSED, if ((py_retval = PyList_New(12)) == NULL) return NULL;
- PyList_SetItem(py_retval, 0, libvirt_intWrap((int) info.type)); - PyList_SetItem(py_retval, 1, libvirt_ulonglongWrap(info.timeElapsed)); - PyList_SetItem(py_retval, 2, libvirt_ulonglongWrap(info.timeRemaining)); - PyList_SetItem(py_retval, 3, libvirt_ulonglongWrap(info.dataTotal)); - PyList_SetItem(py_retval, 4, libvirt_ulonglongWrap(info.dataProcessed)); - PyList_SetItem(py_retval, 5, libvirt_ulonglongWrap(info.dataRemaining)); - PyList_SetItem(py_retval, 6, libvirt_ulonglongWrap(info.memTotal)); - PyList_SetItem(py_retval, 7, libvirt_ulonglongWrap(info.memProcessed)); - PyList_SetItem(py_retval, 8, libvirt_ulonglongWrap(info.memRemaining)); - PyList_SetItem(py_retval, 9, libvirt_ulonglongWrap(info.fileTotal)); - PyList_SetItem(py_retval, 10, libvirt_ulonglongWrap(info.fileProcessed)); - PyList_SetItem(py_retval, 11, libvirt_ulonglongWrap(info.fileRemaining)); + VIR_PY_LIST_SET_GOTO(py_retval, 0, + libvirt_intWrap((int) info.type), error); + VIR_PY_LIST_SET_GOTO(py_retval, 1, + libvirt_ulonglongWrap(info.timeElapsed), error); + VIR_PY_LIST_SET_GOTO(py_retval, 2, + libvirt_ulonglongWrap(info.timeRemaining), error); + VIR_PY_LIST_SET_GOTO(py_retval, 3, + libvirt_ulonglongWrap(info.dataTotal), error); + VIR_PY_LIST_SET_GOTO(py_retval, 4, + libvirt_ulonglongWrap(info.dataProcessed), error); + VIR_PY_LIST_SET_GOTO(py_retval, 5, + libvirt_ulonglongWrap(info.dataRemaining), error); + VIR_PY_LIST_SET_GOTO(py_retval, 6, + libvirt_ulonglongWrap(info.memTotal), error); + VIR_PY_LIST_SET_GOTO(py_retval, 7, + libvirt_ulonglongWrap(info.memProcessed), error); + VIR_PY_LIST_SET_GOTO(py_retval, 8, + libvirt_ulonglongWrap(info.memRemaining), error); + VIR_PY_LIST_SET_GOTO(py_retval, 9, + libvirt_ulonglongWrap(info.fileTotal), error); + VIR_PY_LIST_SET_GOTO(py_retval, 10, + libvirt_ulonglongWrap(info.fileProcessed), error); + VIR_PY_LIST_SET_GOTO(py_retval, 11, + libvirt_ulonglongWrap(info.fileRemaining), error);
return py_retval; + + error: + Py_DECREF(py_retval); + return NULL; }
#if LIBVIR_CHECK_VERSION(1, 0, 3) @@ -4984,10 +5075,7 @@ libvirt_virDomainInterfaceAddresses(PyObject *self ATTRIBUTE_UNUSED, if (!py_addr) goto error;
- if (PyList_SetItem(py_addrs, j, py_addr) < 0) { - Py_DECREF(py_addr); - goto error; - } + VIR_PY_LIST_SET_GOTO(py_addrs, j, py_addr, error);
if ((py_iname = libvirt_constcharPtrWrap("addr")) == NULL || (py_ivalue = libvirt_constcharPtrWrap(addr->addr)) == NULL || @@ -6114,7 +6202,7 @@ libvirt_virConnectDomainEventGraphicsCallback(virConnectPtr conn ATTRIBUTE_UNUSE if (pair == NULL) goto cleanup;
- PyList_SetItem(pyobj_subject, i, pair); + VIR_PY_LIST_SET_GOTO(pyobj_subject, i, pair, cleanup);
VIR_PY_TUPLE_SET_GOTO(pair, 0, libvirt_constcharPtrWrap(subject->identities[i].type), @@ -7682,12 +7770,9 @@ libvirt_virNodeGetCPUMap(PyObject *self ATTRIBUTE_UNUSED,
VIR_PY_TUPLE_SET_GOTO(ret, 1, pycpumap, error);
- for (i = 0; i < i_retval; i++) { - if ((pyused = PyBool_FromLong(VIR_CPU_USED(cpumap, i))) == NULL) - goto error; - if (PyList_SetItem(pycpumap, i, pyused) < 0) - goto error; - } + for (i = 0; i < i_retval; i++) + VIR_PY_LIST_SET_GOTO(pycpumap, i, + PyBool_FromLong(VIR_CPU_USED(cpumap, i)), error);
build issue - 'pyused' no longer needed John
/* 2: number of online CPUs */ VIR_PY_TUPLE_SET_GOTO(ret, 2, libvirt_uintWrap(online), error); @@ -8143,8 +8228,7 @@ libvirt_virNetworkGetDHCPLeases(PyObject *self ATTRIBUTE_UNUSED, if ((py_lease = PyDict_New()) == NULL) goto error;
- if (PyList_SetItem(py_retval, i, py_lease) < 0) - goto error; + VIR_PY_LIST_SET_GOTO(py_retval, i, py_lease, error);
#define VIR_SET_LEASE_ITEM(NAME, VALUE_OBJ_FUNC) \ do { \ @@ -8207,11 +8291,8 @@ convertDomainStatsRecord(virDomainStatsRecordPtr *records, if (!(py_record = PyTuple_New(2))) goto error;
- if (PyList_SetItem(py_retval, i, py_record) < 0) - goto error; + VIR_PY_LIST_SET_GOTO(py_retval, i, py_record, error);
- /* libvirt_virDomainPtrWrap steals the object */ - virDomainRef(records[i]->dom); VIR_PY_TUPLE_SET_GOTO(py_record, 0, libvirt_virDomainPtrWrap(records[i]->dom), error); @@ -8453,7 +8534,7 @@ libvirt_virDomainGetFSInfo(PyObject *self ATTRIBUTE_UNUSED, if (info == NULL) goto error;
- PyList_SetItem(py_retval, i, info); + VIR_PY_LIST_SET_GOTO(py_retval, i, info, error);
VIR_PY_TUPLE_SET_GOTO(info, 0, libvirt_constcharPtrWrap(fs->mountpoint), error); @@ -8468,9 +8549,9 @@ libvirt_virDomainGetFSInfo(PyObject *self ATTRIBUTE_UNUSED, VIR_PY_TUPLE_SET_GOTO(info, 3, alias, error);
for (j = 0; j < fs->ndevAlias; j++) - if (PyList_Append(alias, - libvirt_constcharPtrWrap(fs->devAlias[j])) < 0) - goto error; + VIR_PY_LIST_APPEND_GOTO(alias, + libvirt_constcharPtrWrap(fs->devAlias[j]), + error); }
cleanup:

Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 275 +++++++++++++++++++---------------------------------- libvirt-utils.c | 13 +-- 2 files changed, 99 insertions(+), 189 deletions(-) diff --git a/libvirt-override.c b/libvirt-override.c index 1f795d9..3192e74 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -403,18 +403,14 @@ libvirt_virDomainMemoryStats(PyObject *self ATTRIBUTE_UNUSED, } val = libvirt_ulonglongWrap(stats[i].val); - if (!key || !val || PyDict_SetItem(info, key, val) < 0) { - Py_CLEAR(info); - goto cleanup; - } - Py_CLEAR(key); - Py_CLEAR(val); + VIR_PY_DICT_SET_GOTO(info, key, val, error); } - cleanup: - Py_XDECREF(key); - Py_XDECREF(val); return info; + + error: + Py_DECREF(info); + return NULL; } static PyObject * @@ -3358,23 +3354,16 @@ libvirt_virNodeGetCPUStats(PyObject *self ATTRIBUTE_UNUSED, key = libvirt_constcharPtrWrap(stats[i].field); val = libvirt_ulonglongWrap(stats[i].value); - if (!key || !val || PyDict_SetItem(ret, key, val) < 0) { - Py_CLEAR(ret); - goto error; - } - - Py_DECREF(key); - Py_DECREF(val); + VIR_PY_DICT_SET_GOTO(ret, key, val, error); } + cleanup: VIR_FREE(stats); return ret; error: - VIR_FREE(stats); - Py_XDECREF(key); - Py_XDECREF(val); - return ret; + Py_CLEAR(ret); + goto cleanup; } static PyObject * @@ -3423,23 +3412,16 @@ libvirt_virNodeGetMemoryStats(PyObject *self ATTRIBUTE_UNUSED, key = libvirt_constcharPtrWrap(stats[i].field); val = libvirt_ulonglongWrap(stats[i].value); - if (!key || !val || PyDict_SetItem(ret, key, val) < 0) { - Py_CLEAR(ret); - goto error; - } - - Py_DECREF(key); - Py_DECREF(val); + VIR_PY_DICT_SET_GOTO(ret, key, val, error); } + cleanup: VIR_FREE(stats); return ret; error: - VIR_FREE(stats); - Py_XDECREF(key); - Py_XDECREF(val); - return ret; + Py_CLEAR(ret); + goto cleanup; } static PyObject * @@ -4747,11 +4729,8 @@ libvirt_virDomainGetJobStats(PyObject *self ATTRIBUTE_UNUSED, if (!(dict = getPyVirTypedParameter(params, nparams))) goto cleanup; - if (PyDict_SetItem(dict, libvirt_constcharPtrWrap("type"), - libvirt_intWrap(type)) < 0) { - Py_CLEAR(dict); - goto cleanup; - } + VIR_PY_DICT_SET_GOTO(dict, libvirt_constcharPtrWrap("type"), + libvirt_intWrap(type), cleanup); cleanup: virTypedParamsFree(params, nparams); @@ -4790,34 +4769,19 @@ libvirt_virDomainGetBlockJobInfo(PyObject *self ATTRIBUTE_UNUSED, if (c_ret == 0) return dict; - if ((type = libvirt_intWrap(info.type)) == NULL || - PyDict_SetItemString(dict, "type", type) < 0) - goto error; - Py_DECREF(type); - - if ((bandwidth = libvirt_ulongWrap(info.bandwidth)) == NULL || - PyDict_SetItemString(dict, "bandwidth", bandwidth) < 0) - goto error; - Py_DECREF(bandwidth); - - if ((cur = libvirt_ulonglongWrap(info.cur)) == NULL || - PyDict_SetItemString(dict, "cur", cur) < 0) - goto error; - Py_DECREF(cur); - - if ((end = libvirt_ulonglongWrap(info.end)) == NULL || - PyDict_SetItemString(dict, "end", end) < 0) - goto error; - Py_DECREF(end); + VIR_PY_DICT_SET_GOTO(dict, libvirt_constcharPtrWrap("type"), + libvirt_intWrap(info.type), error); + VIR_PY_DICT_SET_GOTO(dict, libvirt_constcharPtrWrap("bandwidth"), + libvirt_ulongWrap(info.bandwidth), error); + VIR_PY_DICT_SET_GOTO(dict, libvirt_constcharPtrWrap("cur"), + libvirt_ulonglongWrap(info.cur), error); + VIR_PY_DICT_SET_GOTO(dict, libvirt_constcharPtrWrap("end"), + libvirt_ulonglongWrap(info.end), error); return dict; error: Py_DECREF(dict); - Py_XDECREF(type); - Py_XDECREF(bandwidth); - Py_XDECREF(cur); - Py_XDECREF(end); return NULL; } @@ -4983,9 +4947,10 @@ libvirt_virDomainGetDiskErrors(PyObject *self ATTRIBUTE_UNUSED, goto cleanup; for (i = 0; i < count; i++) { - PyDict_SetItem(py_retval, - libvirt_constcharPtrWrap(disks[i].disk), - libvirt_intWrap(disks[i].error)); + VIR_PY_DICT_SET_GOTO(py_retval, + libvirt_constcharPtrWrap(disks[i].disk), + libvirt_intWrap(disks[i].error), + error); } cleanup: @@ -4995,6 +4960,10 @@ libvirt_virDomainGetDiskErrors(PyObject *self ATTRIBUTE_UNUSED, VIR_FREE(disks); } return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; } @@ -5038,12 +5007,8 @@ libvirt_virDomainInterfaceAddresses(PyObject *self ATTRIBUTE_UNUSED, if (!(py_iface = PyDict_New())) goto error; - if ((py_iname = libvirt_charPtrWrap(iface->name)) == NULL || - PyDict_SetItem(py_retval, py_iname, py_iface) < 0) { - Py_XDECREF(py_iname); - Py_DECREF(py_iface); - goto error; - } + VIR_PY_DICT_SET_GOTO(py_retval, libvirt_charPtrWrap(iface->name), + py_iface, error); if (iface->naddrs) { if (!(py_addrs = PyList_New(iface->naddrs))) { @@ -5053,20 +5018,11 @@ libvirt_virDomainInterfaceAddresses(PyObject *self ATTRIBUTE_UNUSED, py_addrs = VIR_PY_NONE; } - if ((py_iname = libvirt_constcharPtrWrap("addrs")) == NULL || - PyDict_SetItem(py_iface, py_iname, py_addrs) < 0) { - Py_XDECREF(py_iname); - Py_DECREF(py_addrs); - goto error; - } + VIR_PY_DICT_SET_GOTO(py_iface, libvirt_constcharPtrWrap("addrs"), + py_addrs, error); - if ((py_iname = libvirt_constcharPtrWrap("hwaddr")) == NULL || - (py_ivalue = libvirt_constcharPtrWrap(iface->hwaddr)) == NULL || - PyDict_SetItem(py_iface, py_iname, py_ivalue) < 0) { - Py_XDECREF(py_iname); - Py_XDECREF(py_ivalue); - goto error; - } + VIR_PY_DICT_SET_GOTO(py_iface, libvirt_constcharPtrWrap("hwaddr"), + libvirt_constcharPtrWrap(iface->hwaddr), error); for (j = 0; j < iface->naddrs; j++) { virDomainIPAddressPtr addr = &(iface->addrs[j]); @@ -5077,27 +5033,12 @@ libvirt_virDomainInterfaceAddresses(PyObject *self ATTRIBUTE_UNUSED, VIR_PY_LIST_SET_GOTO(py_addrs, j, py_addr, error); - if ((py_iname = libvirt_constcharPtrWrap("addr")) == NULL || - (py_ivalue = libvirt_constcharPtrWrap(addr->addr)) == NULL || - PyDict_SetItem(py_addr, py_iname, py_ivalue) < 0) { - Py_XDECREF(py_iname); - Py_XDECREF(py_ivalue); - goto error; - } - if ((py_iname = libvirt_constcharPtrWrap("prefix")) == NULL || - (py_ivalue = libvirt_intWrap(addr->prefix)) == NULL || - PyDict_SetItem(py_addr, py_iname, py_ivalue) < 0) { - Py_XDECREF(py_iname); - Py_XDECREF(py_ivalue); - goto error; - } - if ((py_iname = libvirt_constcharPtrWrap("type")) == NULL || - (py_ivalue = libvirt_intWrap(addr->type)) == NULL || - PyDict_SetItem(py_addr, py_iname, py_ivalue) < 0) { - Py_XDECREF(py_iname); - Py_XDECREF(py_ivalue); - goto error; - } + VIR_PY_DICT_SET_GOTO(py_addr, libvirt_constcharPtrWrap("addr"), + libvirt_constcharPtrWrap(addr->addr), error); + VIR_PY_DICT_SET_GOTO(py_addr, libvirt_constcharPtrWrap("prefix"), + libvirt_uintWrap(addr->prefix), error); + VIR_PY_DICT_SET_GOTO(py_addr, libvirt_constcharPtrWrap("type"), + libvirt_intWrap(addr->type), error); } } @@ -6171,28 +6112,34 @@ libvirt_virConnectDomainEventGraphicsCallback(virConnectPtr conn ATTRIBUTE_UNUSE if ((pyobj_local = PyDict_New()) == NULL) goto cleanup; - PyDict_SetItem(pyobj_local, - libvirt_constcharPtrWrap("family"), - libvirt_intWrap(local->family)); - PyDict_SetItem(pyobj_local, - libvirt_constcharPtrWrap("node"), - libvirt_constcharPtrWrap(local->node)); - PyDict_SetItem(pyobj_local, - libvirt_constcharPtrWrap("service"), - libvirt_constcharPtrWrap(local->service)); + VIR_PY_DICT_SET_GOTO(pyobj_local, + libvirt_constcharPtrWrap("family"), + libvirt_intWrap(local->family), + cleanup); + VIR_PY_DICT_SET_GOTO(pyobj_local, + libvirt_constcharPtrWrap("node"), + libvirt_constcharPtrWrap(local->node), + cleanup); + VIR_PY_DICT_SET_GOTO(pyobj_local, + libvirt_constcharPtrWrap("service"), + libvirt_constcharPtrWrap(local->service), + cleanup); if ((pyobj_remote = PyDict_New()) == NULL) goto cleanup; - PyDict_SetItem(pyobj_remote, - libvirt_constcharPtrWrap("family"), - libvirt_intWrap(remote->family)); - PyDict_SetItem(pyobj_remote, - libvirt_constcharPtrWrap("node"), - libvirt_constcharPtrWrap(remote->node)); - PyDict_SetItem(pyobj_remote, - libvirt_constcharPtrWrap("service"), - libvirt_constcharPtrWrap(remote->service)); + VIR_PY_DICT_SET_GOTO(pyobj_remote, + libvirt_constcharPtrWrap("family"), + libvirt_intWrap(remote->family), + cleanup); + VIR_PY_DICT_SET_GOTO(pyobj_remote, + libvirt_constcharPtrWrap("node"), + libvirt_constcharPtrWrap(remote->node), + cleanup); + VIR_PY_DICT_SET_GOTO(pyobj_remote, + libvirt_constcharPtrWrap("service"), + libvirt_constcharPtrWrap(remote->service), + cleanup); if ((pyobj_subject = PyList_New(subject->nidentity)) == NULL) goto cleanup; @@ -8011,15 +7958,10 @@ libvirt_virDomainGetTime(PyObject *self ATTRIBUTE_UNUSED, goto cleanup; } - if (!(pyobj_seconds = libvirt_longlongWrap(seconds)) || - PyDict_SetItemString(dict, "seconds", pyobj_seconds) < 0) - goto cleanup; - Py_DECREF(pyobj_seconds); - - if (!(pyobj_nseconds = libvirt_uintWrap(nseconds)) || - PyDict_SetItemString(dict, "nseconds", pyobj_nseconds) < 0) - goto cleanup; - Py_DECREF(pyobj_nseconds); + VIR_PY_DICT_SET_GOTO(dict, libvirt_constcharPtrWrap("seconds"), + libvirt_longlongWrap(seconds), cleanup); + VIR_PY_DICT_SET_GOTO(dict, libvirt_constcharPtrWrap("nseconds"), + libvirt_longlongWrap(nseconds), cleanup); py_retval = dict; dict = NULL; @@ -8148,35 +8090,18 @@ libvirt_virNodeGetFreePages(PyObject *self ATTRIBUTE_UNUSED, for (i = 0; i < c_retval;) { PyObject *per_node = NULL; - PyObject *node = NULL; - if (!(per_node = PyDict_New()) || - !(node = libvirt_intWrap(startCell + i/pyobj_pagesize_size))) { - Py_XDECREF(per_node); - Py_XDECREF(node); + if (!(per_node = PyDict_New())) goto cleanup; - } - if (PyDict_SetItem(pyobj_counts, node, per_node) < 0) { - Py_XDECREF(per_node); - Py_XDECREF(node); - goto cleanup; - } + VIR_PY_DICT_SET_GOTO(pyobj_counts, + libvirt_intWrap(startCell + i/pyobj_pagesize_size), + per_node, cleanup); + + for (j = 0; j < pyobj_pagesize_size; j ++) + VIR_PY_DICT_SET_GOTO(per_node, libvirt_intWrap(pages[j]), + libvirt_intWrap(counts[i + j]), cleanup); - for (j = 0; j < pyobj_pagesize_size; j ++) { - PyObject *page = NULL; - PyObject *count = NULL; - - if (!(page = libvirt_intWrap(pages[j])) || - !(count = libvirt_intWrap(counts[i + j])) || - PyDict_SetItem(per_node, page, count) < 0) { - Py_XDECREF(page); - Py_XDECREF(count); - Py_XDECREF(per_node); - Py_XDECREF(node); - goto cleanup; - } - } i += pyobj_pagesize_size; } @@ -8230,30 +8155,24 @@ libvirt_virNetworkGetDHCPLeases(PyObject *self ATTRIBUTE_UNUSED, VIR_PY_LIST_SET_GOTO(py_retval, i, py_lease, error); -#define VIR_SET_LEASE_ITEM(NAME, VALUE_OBJ_FUNC) \ - do { \ - PyObject *tmp_val; \ - \ - if (!(tmp_val = VALUE_OBJ_FUNC)) \ - goto error; \ - \ - if (PyDict_SetItemString(py_lease, NAME, tmp_val) < 0) { \ - Py_DECREF(tmp_val); \ - goto error; \ - } \ - } while (0) - - VIR_SET_LEASE_ITEM("iface", libvirt_charPtrWrap(lease->iface)); - VIR_SET_LEASE_ITEM("expirytime", libvirt_longlongWrap(lease->expirytime)); - VIR_SET_LEASE_ITEM("type", libvirt_intWrap(lease->type)); - VIR_SET_LEASE_ITEM("mac", libvirt_charPtrWrap(lease->mac)); - VIR_SET_LEASE_ITEM("ipaddr", libvirt_charPtrWrap(lease->ipaddr)); - VIR_SET_LEASE_ITEM("prefix", libvirt_uintWrap(lease->prefix)); - VIR_SET_LEASE_ITEM("hostname", libvirt_charPtrWrap(lease->hostname)); - VIR_SET_LEASE_ITEM("clientid", libvirt_charPtrWrap(lease->clientid)); - VIR_SET_LEASE_ITEM("iaid", libvirt_charPtrWrap(lease->iaid)); - -#undef VIR_SET_LEASE_ITEM + VIR_PY_DICT_SET_GOTO(py_lease, libvirt_constcharPtrWrap("iface"), + libvirt_charPtrWrap(lease->iface), error); + VIR_PY_DICT_SET_GOTO(py_lease, libvirt_constcharPtrWrap("expirytime"), + libvirt_longlongWrap(lease->expirytime), error); + VIR_PY_DICT_SET_GOTO(py_lease, libvirt_constcharPtrWrap("type"), + libvirt_intWrap(lease->type), error); + VIR_PY_DICT_SET_GOTO(py_lease, libvirt_constcharPtrWrap("mac"), + libvirt_charPtrWrap(lease->mac), error); + VIR_PY_DICT_SET_GOTO(py_lease, libvirt_constcharPtrWrap("ipaddr"), + libvirt_charPtrWrap(lease->ipaddr), error); + VIR_PY_DICT_SET_GOTO(py_lease, libvirt_constcharPtrWrap("prefix"), + libvirt_uintWrap(lease->prefix), error); + VIR_PY_DICT_SET_GOTO(py_lease, libvirt_constcharPtrWrap("hostname"), + libvirt_charPtrWrap(lease->hostname), error); + VIR_PY_DICT_SET_GOTO(py_lease, libvirt_constcharPtrWrap("clientid"), + libvirt_charPtrWrap(lease->clientid), error); + VIR_PY_DICT_SET_GOTO(py_lease, libvirt_constcharPtrWrap("iaid"), + libvirt_charPtrWrap(lease->iaid), error); } cleanup: diff --git a/libvirt-utils.c b/libvirt-utils.c index 02a28ac..2bf7519 100644 --- a/libvirt-utils.c +++ b/libvirt-utils.c @@ -267,22 +267,13 @@ getPyVirTypedParameter(const virTypedParameter *params, } key = libvirt_constcharPtrWrap(params[i].field); - if (!key || !val) - goto cleanup; - - if (PyDict_SetItem(info, key, val) < 0) { - Py_DECREF(info); - goto cleanup; - } - Py_DECREF(key); - Py_DECREF(val); + VIR_PY_DICT_SET_GOTO(info, key, val, cleanup); } return info; cleanup: - Py_XDECREF(key); - Py_XDECREF(val); + Py_DECREF(info); return NULL; } -- 2.5.3

On 09/24/2015 10:01 AM, Pavel Hrdina wrote:
Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 275 +++++++++++++++++++---------------------------------- libvirt-utils.c | 13 +-- 2 files changed, 99 insertions(+), 189 deletions(-)
diff --git a/libvirt-override.c b/libvirt-override.c index 1f795d9..3192e74 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -403,18 +403,14 @@ libvirt_virDomainMemoryStats(PyObject *self ATTRIBUTE_UNUSED, } val = libvirt_ulonglongWrap(stats[i].val);
- if (!key || !val || PyDict_SetItem(info, key, val) < 0) { - Py_CLEAR(info); - goto cleanup; - } - Py_CLEAR(key); - Py_CLEAR(val); + VIR_PY_DICT_SET_GOTO(info, key, val, error); }
- cleanup: - Py_XDECREF(key); - Py_XDECREF(val); return info; + + error: + Py_DECREF(info); + return NULL; }
static PyObject * @@ -3358,23 +3354,16 @@ libvirt_virNodeGetCPUStats(PyObject *self ATTRIBUTE_UNUSED, key = libvirt_constcharPtrWrap(stats[i].field); val = libvirt_ulonglongWrap(stats[i].value);
- if (!key || !val || PyDict_SetItem(ret, key, val) < 0) { - Py_CLEAR(ret); - goto error; - } - - Py_DECREF(key); - Py_DECREF(val); + VIR_PY_DICT_SET_GOTO(ret, key, val, error); }
+ cleanup: VIR_FREE(stats); return ret;
error: - VIR_FREE(stats); - Py_XDECREF(key); - Py_XDECREF(val); - return ret; + Py_CLEAR(ret); + goto cleanup; }
static PyObject * @@ -3423,23 +3412,16 @@ libvirt_virNodeGetMemoryStats(PyObject *self ATTRIBUTE_UNUSED, key = libvirt_constcharPtrWrap(stats[i].field); val = libvirt_ulonglongWrap(stats[i].value);
- if (!key || !val || PyDict_SetItem(ret, key, val) < 0) { - Py_CLEAR(ret); - goto error; - } - - Py_DECREF(key); - Py_DECREF(val); + VIR_PY_DICT_SET_GOTO(ret, key, val, error); }
+ cleanup: VIR_FREE(stats); return ret;
error: - VIR_FREE(stats); - Py_XDECREF(key); - Py_XDECREF(val); - return ret; + Py_CLEAR(ret); + goto cleanup; }
static PyObject * @@ -4747,11 +4729,8 @@ libvirt_virDomainGetJobStats(PyObject *self ATTRIBUTE_UNUSED, if (!(dict = getPyVirTypedParameter(params, nparams))) goto cleanup;
- if (PyDict_SetItem(dict, libvirt_constcharPtrWrap("type"), - libvirt_intWrap(type)) < 0) { - Py_CLEAR(dict); - goto cleanup; - } + VIR_PY_DICT_SET_GOTO(dict, libvirt_constcharPtrWrap("type"), + libvirt_intWrap(type), cleanup);
it's not clear in this case on error that there's a "Py_CLEAR(dict);" - think you may need a goto error which has the Py_CLEAR(dict) and goto cleanup
cleanup: virTypedParamsFree(params, nparams); @@ -4790,34 +4769,19 @@ libvirt_virDomainGetBlockJobInfo(PyObject *self ATTRIBUTE_UNUSED, if (c_ret == 0) return dict;
- if ((type = libvirt_intWrap(info.type)) == NULL || - PyDict_SetItemString(dict, "type", type) < 0) - goto error; - Py_DECREF(type); - - if ((bandwidth = libvirt_ulongWrap(info.bandwidth)) == NULL || - PyDict_SetItemString(dict, "bandwidth", bandwidth) < 0) - goto error; - Py_DECREF(bandwidth); - - if ((cur = libvirt_ulonglongWrap(info.cur)) == NULL || - PyDict_SetItemString(dict, "cur", cur) < 0) - goto error; - Py_DECREF(cur); - - if ((end = libvirt_ulonglongWrap(info.end)) == NULL || - PyDict_SetItemString(dict, "end", end) < 0) - goto error; - Py_DECREF(end); + VIR_PY_DICT_SET_GOTO(dict, libvirt_constcharPtrWrap("type"), + libvirt_intWrap(info.type), error); + VIR_PY_DICT_SET_GOTO(dict, libvirt_constcharPtrWrap("bandwidth"), + libvirt_ulongWrap(info.bandwidth), error); + VIR_PY_DICT_SET_GOTO(dict, libvirt_constcharPtrWrap("cur"), + libvirt_ulonglongWrap(info.cur), error); + VIR_PY_DICT_SET_GOTO(dict, libvirt_constcharPtrWrap("end"), + libvirt_ulonglongWrap(info.end), error);
build issue - 'end', 'cur', 'bandwidth', and 'type' no longer necessary
return dict;
error: Py_DECREF(dict);
Should this by Py_CLEAR or XDECREF? (I forget already)
- Py_XDECREF(type); - Py_XDECREF(bandwidth); - Py_XDECREF(cur); - Py_XDECREF(end); return NULL; }
@@ -4983,9 +4947,10 @@ libvirt_virDomainGetDiskErrors(PyObject *self ATTRIBUTE_UNUSED, goto cleanup;
for (i = 0; i < count; i++) { - PyDict_SetItem(py_retval, - libvirt_constcharPtrWrap(disks[i].disk), - libvirt_intWrap(disks[i].error)); + VIR_PY_DICT_SET_GOTO(py_retval, + libvirt_constcharPtrWrap(disks[i].disk), + libvirt_intWrap(disks[i].error), + error); }
cleanup: @@ -4995,6 +4960,10 @@ libvirt_virDomainGetDiskErrors(PyObject *self ATTRIBUTE_UNUSED, VIR_FREE(disks); } return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; }
@@ -5038,12 +5007,8 @@ libvirt_virDomainInterfaceAddresses(PyObject *self ATTRIBUTE_UNUSED, if (!(py_iface = PyDict_New())) goto error;
- if ((py_iname = libvirt_charPtrWrap(iface->name)) == NULL || - PyDict_SetItem(py_retval, py_iname, py_iface) < 0) { - Py_XDECREF(py_iname); - Py_DECREF(py_iface); - goto error; - } + VIR_PY_DICT_SET_GOTO(py_retval, libvirt_charPtrWrap(iface->name), + py_iface, error);
build issue - 'py_iname' no longer necessary
if (iface->naddrs) { if (!(py_addrs = PyList_New(iface->naddrs))) { @@ -5053,20 +5018,11 @@ libvirt_virDomainInterfaceAddresses(PyObject *self ATTRIBUTE_UNUSED, py_addrs = VIR_PY_NONE; }
- if ((py_iname = libvirt_constcharPtrWrap("addrs")) == NULL || - PyDict_SetItem(py_iface, py_iname, py_addrs) < 0) { - Py_XDECREF(py_iname); - Py_DECREF(py_addrs); - goto error; - } + VIR_PY_DICT_SET_GOTO(py_iface, libvirt_constcharPtrWrap("addrs"), + py_addrs, error);
- if ((py_iname = libvirt_constcharPtrWrap("hwaddr")) == NULL || - (py_ivalue = libvirt_constcharPtrWrap(iface->hwaddr)) == NULL || - PyDict_SetItem(py_iface, py_iname, py_ivalue) < 0) { - Py_XDECREF(py_iname); - Py_XDECREF(py_ivalue); - goto error; - } + VIR_PY_DICT_SET_GOTO(py_iface, libvirt_constcharPtrWrap("hwaddr"), + libvirt_constcharPtrWrap(iface->hwaddr), error);
build issue - 'py_ivalue' no longer necessary
for (j = 0; j < iface->naddrs; j++) { virDomainIPAddressPtr addr = &(iface->addrs[j]); @@ -5077,27 +5033,12 @@ libvirt_virDomainInterfaceAddresses(PyObject *self ATTRIBUTE_UNUSED,
VIR_PY_LIST_SET_GOTO(py_addrs, j, py_addr, error);
- if ((py_iname = libvirt_constcharPtrWrap("addr")) == NULL || - (py_ivalue = libvirt_constcharPtrWrap(addr->addr)) == NULL || - PyDict_SetItem(py_addr, py_iname, py_ivalue) < 0) { - Py_XDECREF(py_iname); - Py_XDECREF(py_ivalue); - goto error; - } - if ((py_iname = libvirt_constcharPtrWrap("prefix")) == NULL || - (py_ivalue = libvirt_intWrap(addr->prefix)) == NULL || - PyDict_SetItem(py_addr, py_iname, py_ivalue) < 0) { - Py_XDECREF(py_iname); - Py_XDECREF(py_ivalue); - goto error; - } - if ((py_iname = libvirt_constcharPtrWrap("type")) == NULL || - (py_ivalue = libvirt_intWrap(addr->type)) == NULL || - PyDict_SetItem(py_addr, py_iname, py_ivalue) < 0) { - Py_XDECREF(py_iname); - Py_XDECREF(py_ivalue); - goto error; - } + VIR_PY_DICT_SET_GOTO(py_addr, libvirt_constcharPtrWrap("addr"), + libvirt_constcharPtrWrap(addr->addr), error); + VIR_PY_DICT_SET_GOTO(py_addr, libvirt_constcharPtrWrap("prefix"), + libvirt_uintWrap(addr->prefix), error); + VIR_PY_DICT_SET_GOTO(py_addr, libvirt_constcharPtrWrap("type"), + libvirt_intWrap(addr->type), error); } }
@@ -6171,28 +6112,34 @@ libvirt_virConnectDomainEventGraphicsCallback(virConnectPtr conn ATTRIBUTE_UNUSE if ((pyobj_local = PyDict_New()) == NULL) goto cleanup;
- PyDict_SetItem(pyobj_local, - libvirt_constcharPtrWrap("family"), - libvirt_intWrap(local->family)); - PyDict_SetItem(pyobj_local, - libvirt_constcharPtrWrap("node"), - libvirt_constcharPtrWrap(local->node)); - PyDict_SetItem(pyobj_local, - libvirt_constcharPtrWrap("service"), - libvirt_constcharPtrWrap(local->service)); + VIR_PY_DICT_SET_GOTO(pyobj_local, + libvirt_constcharPtrWrap("family"), + libvirt_intWrap(local->family), + cleanup); + VIR_PY_DICT_SET_GOTO(pyobj_local, + libvirt_constcharPtrWrap("node"), + libvirt_constcharPtrWrap(local->node), + cleanup); + VIR_PY_DICT_SET_GOTO(pyobj_local, + libvirt_constcharPtrWrap("service"), + libvirt_constcharPtrWrap(local->service), + cleanup);
if ((pyobj_remote = PyDict_New()) == NULL) goto cleanup;
- PyDict_SetItem(pyobj_remote, - libvirt_constcharPtrWrap("family"), - libvirt_intWrap(remote->family)); - PyDict_SetItem(pyobj_remote, - libvirt_constcharPtrWrap("node"), - libvirt_constcharPtrWrap(remote->node)); - PyDict_SetItem(pyobj_remote, - libvirt_constcharPtrWrap("service"), - libvirt_constcharPtrWrap(remote->service)); + VIR_PY_DICT_SET_GOTO(pyobj_remote, + libvirt_constcharPtrWrap("family"), + libvirt_intWrap(remote->family), + cleanup); + VIR_PY_DICT_SET_GOTO(pyobj_remote, + libvirt_constcharPtrWrap("node"), + libvirt_constcharPtrWrap(remote->node), + cleanup); + VIR_PY_DICT_SET_GOTO(pyobj_remote, + libvirt_constcharPtrWrap("service"), + libvirt_constcharPtrWrap(remote->service), + cleanup);
if ((pyobj_subject = PyList_New(subject->nidentity)) == NULL) goto cleanup; @@ -8011,15 +7958,10 @@ libvirt_virDomainGetTime(PyObject *self ATTRIBUTE_UNUSED, goto cleanup; }
- if (!(pyobj_seconds = libvirt_longlongWrap(seconds)) || - PyDict_SetItemString(dict, "seconds", pyobj_seconds) < 0) - goto cleanup; - Py_DECREF(pyobj_seconds); - - if (!(pyobj_nseconds = libvirt_uintWrap(nseconds)) || - PyDict_SetItemString(dict, "nseconds", pyobj_nseconds) < 0) - goto cleanup; - Py_DECREF(pyobj_nseconds); + VIR_PY_DICT_SET_GOTO(dict, libvirt_constcharPtrWrap("seconds"), + libvirt_longlongWrap(seconds), cleanup); + VIR_PY_DICT_SET_GOTO(dict, libvirt_constcharPtrWrap("nseconds"), + libvirt_longlongWrap(nseconds), cleanup);
build issue - 'pyobj_seconds' and 'pyobj_nseconds' no longer necessary The rest seemed OK John
py_retval = dict; dict = NULL; @@ -8148,35 +8090,18 @@ libvirt_virNodeGetFreePages(PyObject *self ATTRIBUTE_UNUSED,
for (i = 0; i < c_retval;) { PyObject *per_node = NULL; - PyObject *node = NULL;
- if (!(per_node = PyDict_New()) || - !(node = libvirt_intWrap(startCell + i/pyobj_pagesize_size))) { - Py_XDECREF(per_node); - Py_XDECREF(node); + if (!(per_node = PyDict_New())) goto cleanup; - }
- if (PyDict_SetItem(pyobj_counts, node, per_node) < 0) { - Py_XDECREF(per_node); - Py_XDECREF(node); - goto cleanup; - } + VIR_PY_DICT_SET_GOTO(pyobj_counts, + libvirt_intWrap(startCell + i/pyobj_pagesize_size), + per_node, cleanup); + + for (j = 0; j < pyobj_pagesize_size; j ++) + VIR_PY_DICT_SET_GOTO(per_node, libvirt_intWrap(pages[j]), + libvirt_intWrap(counts[i + j]), cleanup);
- for (j = 0; j < pyobj_pagesize_size; j ++) { - PyObject *page = NULL; - PyObject *count = NULL; - - if (!(page = libvirt_intWrap(pages[j])) || - !(count = libvirt_intWrap(counts[i + j])) || - PyDict_SetItem(per_node, page, count) < 0) { - Py_XDECREF(page); - Py_XDECREF(count); - Py_XDECREF(per_node); - Py_XDECREF(node); - goto cleanup; - } - } i += pyobj_pagesize_size; }
@@ -8230,30 +8155,24 @@ libvirt_virNetworkGetDHCPLeases(PyObject *self ATTRIBUTE_UNUSED,
VIR_PY_LIST_SET_GOTO(py_retval, i, py_lease, error);
-#define VIR_SET_LEASE_ITEM(NAME, VALUE_OBJ_FUNC) \ - do { \ - PyObject *tmp_val; \ - \ - if (!(tmp_val = VALUE_OBJ_FUNC)) \ - goto error; \ - \ - if (PyDict_SetItemString(py_lease, NAME, tmp_val) < 0) { \ - Py_DECREF(tmp_val); \ - goto error; \ - } \ - } while (0) - - VIR_SET_LEASE_ITEM("iface", libvirt_charPtrWrap(lease->iface)); - VIR_SET_LEASE_ITEM("expirytime", libvirt_longlongWrap(lease->expirytime)); - VIR_SET_LEASE_ITEM("type", libvirt_intWrap(lease->type)); - VIR_SET_LEASE_ITEM("mac", libvirt_charPtrWrap(lease->mac)); - VIR_SET_LEASE_ITEM("ipaddr", libvirt_charPtrWrap(lease->ipaddr)); - VIR_SET_LEASE_ITEM("prefix", libvirt_uintWrap(lease->prefix)); - VIR_SET_LEASE_ITEM("hostname", libvirt_charPtrWrap(lease->hostname)); - VIR_SET_LEASE_ITEM("clientid", libvirt_charPtrWrap(lease->clientid)); - VIR_SET_LEASE_ITEM("iaid", libvirt_charPtrWrap(lease->iaid)); - -#undef VIR_SET_LEASE_ITEM + VIR_PY_DICT_SET_GOTO(py_lease, libvirt_constcharPtrWrap("iface"), + libvirt_charPtrWrap(lease->iface), error); + VIR_PY_DICT_SET_GOTO(py_lease, libvirt_constcharPtrWrap("expirytime"), + libvirt_longlongWrap(lease->expirytime), error); + VIR_PY_DICT_SET_GOTO(py_lease, libvirt_constcharPtrWrap("type"), + libvirt_intWrap(lease->type), error); + VIR_PY_DICT_SET_GOTO(py_lease, libvirt_constcharPtrWrap("mac"), + libvirt_charPtrWrap(lease->mac), error); + VIR_PY_DICT_SET_GOTO(py_lease, libvirt_constcharPtrWrap("ipaddr"), + libvirt_charPtrWrap(lease->ipaddr), error); + VIR_PY_DICT_SET_GOTO(py_lease, libvirt_constcharPtrWrap("prefix"), + libvirt_uintWrap(lease->prefix), error); + VIR_PY_DICT_SET_GOTO(py_lease, libvirt_constcharPtrWrap("hostname"), + libvirt_charPtrWrap(lease->hostname), error); + VIR_PY_DICT_SET_GOTO(py_lease, libvirt_constcharPtrWrap("clientid"), + libvirt_charPtrWrap(lease->clientid), error); + VIR_PY_DICT_SET_GOTO(py_lease, libvirt_constcharPtrWrap("iaid"), + libvirt_charPtrWrap(lease->iaid), error); }
cleanup: diff --git a/libvirt-utils.c b/libvirt-utils.c index 02a28ac..2bf7519 100644 --- a/libvirt-utils.c +++ b/libvirt-utils.c @@ -267,22 +267,13 @@ getPyVirTypedParameter(const virTypedParameter *params, }
key = libvirt_constcharPtrWrap(params[i].field); - if (!key || !val) - goto cleanup; - - if (PyDict_SetItem(info, key, val) < 0) { - Py_DECREF(info); - goto cleanup; - }
- Py_DECREF(key); - Py_DECREF(val); + VIR_PY_DICT_SET_GOTO(info, key, val, cleanup); } return info;
cleanup: - Py_XDECREF(key); - Py_XDECREF(val); + Py_DECREF(info); return NULL; }

On Sat, Sep 26, 2015 at 10:46:13AM -0400, John Ferlan wrote:
On 09/24/2015 10:01 AM, Pavel Hrdina wrote:
Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 275 +++++++++++++++++++---------------------------------- libvirt-utils.c | 13 +-- 2 files changed, 99 insertions(+), 189 deletions(-)
diff --git a/libvirt-override.c b/libvirt-override.c index 1f795d9..3192e74 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -403,18 +403,14 @@ libvirt_virDomainMemoryStats(PyObject *self ATTRIBUTE_UNUSED, } val = libvirt_ulonglongWrap(stats[i].val);
- if (!key || !val || PyDict_SetItem(info, key, val) < 0) { - Py_CLEAR(info); - goto cleanup; - } - Py_CLEAR(key); - Py_CLEAR(val); + VIR_PY_DICT_SET_GOTO(info, key, val, error); }
- cleanup: - Py_XDECREF(key); - Py_XDECREF(val); return info; + + error: + Py_DECREF(info); + return NULL; }
static PyObject * @@ -3358,23 +3354,16 @@ libvirt_virNodeGetCPUStats(PyObject *self ATTRIBUTE_UNUSED, key = libvirt_constcharPtrWrap(stats[i].field); val = libvirt_ulonglongWrap(stats[i].value);
- if (!key || !val || PyDict_SetItem(ret, key, val) < 0) { - Py_CLEAR(ret); - goto error; - } - - Py_DECREF(key); - Py_DECREF(val); + VIR_PY_DICT_SET_GOTO(ret, key, val, error); }
+ cleanup: VIR_FREE(stats); return ret;
error: - VIR_FREE(stats); - Py_XDECREF(key); - Py_XDECREF(val); - return ret; + Py_CLEAR(ret); + goto cleanup; }
static PyObject * @@ -3423,23 +3412,16 @@ libvirt_virNodeGetMemoryStats(PyObject *self ATTRIBUTE_UNUSED, key = libvirt_constcharPtrWrap(stats[i].field); val = libvirt_ulonglongWrap(stats[i].value);
- if (!key || !val || PyDict_SetItem(ret, key, val) < 0) { - Py_CLEAR(ret); - goto error; - } - - Py_DECREF(key); - Py_DECREF(val); + VIR_PY_DICT_SET_GOTO(ret, key, val, error); }
+ cleanup: VIR_FREE(stats); return ret;
error: - VIR_FREE(stats); - Py_XDECREF(key); - Py_XDECREF(val); - return ret; + Py_CLEAR(ret); + goto cleanup; }
static PyObject * @@ -4747,11 +4729,8 @@ libvirt_virDomainGetJobStats(PyObject *self ATTRIBUTE_UNUSED, if (!(dict = getPyVirTypedParameter(params, nparams))) goto cleanup;
- if (PyDict_SetItem(dict, libvirt_constcharPtrWrap("type"), - libvirt_intWrap(type)) < 0) { - Py_CLEAR(dict); - goto cleanup; - } + VIR_PY_DICT_SET_GOTO(dict, libvirt_constcharPtrWrap("type"), + libvirt_intWrap(type), cleanup);
it's not clear in this case on error that there's a "Py_CLEAR(dict);" - think you may need a goto error which has the Py_CLEAR(dict) and goto cleanup
Right, I'll fix that.
cleanup: virTypedParamsFree(params, nparams); @@ -4790,34 +4769,19 @@ libvirt_virDomainGetBlockJobInfo(PyObject *self ATTRIBUTE_UNUSED, if (c_ret == 0) return dict;
- if ((type = libvirt_intWrap(info.type)) == NULL || - PyDict_SetItemString(dict, "type", type) < 0) - goto error; - Py_DECREF(type); - - if ((bandwidth = libvirt_ulongWrap(info.bandwidth)) == NULL || - PyDict_SetItemString(dict, "bandwidth", bandwidth) < 0) - goto error; - Py_DECREF(bandwidth); - - if ((cur = libvirt_ulonglongWrap(info.cur)) == NULL || - PyDict_SetItemString(dict, "cur", cur) < 0) - goto error; - Py_DECREF(cur); - - if ((end = libvirt_ulonglongWrap(info.end)) == NULL || - PyDict_SetItemString(dict, "end", end) < 0) - goto error; - Py_DECREF(end); + VIR_PY_DICT_SET_GOTO(dict, libvirt_constcharPtrWrap("type"), + libvirt_intWrap(info.type), error); + VIR_PY_DICT_SET_GOTO(dict, libvirt_constcharPtrWrap("bandwidth"), + libvirt_ulongWrap(info.bandwidth), error); + VIR_PY_DICT_SET_GOTO(dict, libvirt_constcharPtrWrap("cur"), + libvirt_ulonglongWrap(info.cur), error); + VIR_PY_DICT_SET_GOTO(dict, libvirt_constcharPtrWrap("end"), + libvirt_ulonglongWrap(info.end), error);
build issue - 'end', 'cur', 'bandwidth', and 'type' no longer necessary
return dict;
error: Py_DECREF(dict);
Should this by Py_CLEAR or XDECREF? (I forget already)
If you are sure, that dict != NULL, you can use Py_DECREF, if dict can by null, you must use Py_XDECREF. Py_CLEAR is used only in case, that you need to decrement the dict and also set it to NULL. The correct one is Py_DECREF, becasue we know, that dict != null and we don't need to set it to null. Pavel
- Py_XDECREF(type); - Py_XDECREF(bandwidth); - Py_XDECREF(cur); - Py_XDECREF(end); return NULL; }
@@ -4983,9 +4947,10 @@ libvirt_virDomainGetDiskErrors(PyObject *self ATTRIBUTE_UNUSED, goto cleanup;
for (i = 0; i < count; i++) { - PyDict_SetItem(py_retval, - libvirt_constcharPtrWrap(disks[i].disk), - libvirt_intWrap(disks[i].error)); + VIR_PY_DICT_SET_GOTO(py_retval, + libvirt_constcharPtrWrap(disks[i].disk), + libvirt_intWrap(disks[i].error), + error); }
cleanup: @@ -4995,6 +4960,10 @@ libvirt_virDomainGetDiskErrors(PyObject *self ATTRIBUTE_UNUSED, VIR_FREE(disks); } return py_retval; + + error: + Py_CLEAR(py_retval); + goto cleanup; }
@@ -5038,12 +5007,8 @@ libvirt_virDomainInterfaceAddresses(PyObject *self ATTRIBUTE_UNUSED, if (!(py_iface = PyDict_New())) goto error;
- if ((py_iname = libvirt_charPtrWrap(iface->name)) == NULL || - PyDict_SetItem(py_retval, py_iname, py_iface) < 0) { - Py_XDECREF(py_iname); - Py_DECREF(py_iface); - goto error; - } + VIR_PY_DICT_SET_GOTO(py_retval, libvirt_charPtrWrap(iface->name), + py_iface, error);
build issue - 'py_iname' no longer necessary
if (iface->naddrs) { if (!(py_addrs = PyList_New(iface->naddrs))) { @@ -5053,20 +5018,11 @@ libvirt_virDomainInterfaceAddresses(PyObject *self ATTRIBUTE_UNUSED, py_addrs = VIR_PY_NONE; }
- if ((py_iname = libvirt_constcharPtrWrap("addrs")) == NULL || - PyDict_SetItem(py_iface, py_iname, py_addrs) < 0) { - Py_XDECREF(py_iname); - Py_DECREF(py_addrs); - goto error; - } + VIR_PY_DICT_SET_GOTO(py_iface, libvirt_constcharPtrWrap("addrs"), + py_addrs, error);
- if ((py_iname = libvirt_constcharPtrWrap("hwaddr")) == NULL || - (py_ivalue = libvirt_constcharPtrWrap(iface->hwaddr)) == NULL || - PyDict_SetItem(py_iface, py_iname, py_ivalue) < 0) { - Py_XDECREF(py_iname); - Py_XDECREF(py_ivalue); - goto error; - } + VIR_PY_DICT_SET_GOTO(py_iface, libvirt_constcharPtrWrap("hwaddr"), + libvirt_constcharPtrWrap(iface->hwaddr), error);
build issue - 'py_ivalue' no longer necessary
for (j = 0; j < iface->naddrs; j++) { virDomainIPAddressPtr addr = &(iface->addrs[j]); @@ -5077,27 +5033,12 @@ libvirt_virDomainInterfaceAddresses(PyObject *self ATTRIBUTE_UNUSED,
VIR_PY_LIST_SET_GOTO(py_addrs, j, py_addr, error);
- if ((py_iname = libvirt_constcharPtrWrap("addr")) == NULL || - (py_ivalue = libvirt_constcharPtrWrap(addr->addr)) == NULL || - PyDict_SetItem(py_addr, py_iname, py_ivalue) < 0) { - Py_XDECREF(py_iname); - Py_XDECREF(py_ivalue); - goto error; - } - if ((py_iname = libvirt_constcharPtrWrap("prefix")) == NULL || - (py_ivalue = libvirt_intWrap(addr->prefix)) == NULL || - PyDict_SetItem(py_addr, py_iname, py_ivalue) < 0) { - Py_XDECREF(py_iname); - Py_XDECREF(py_ivalue); - goto error; - } - if ((py_iname = libvirt_constcharPtrWrap("type")) == NULL || - (py_ivalue = libvirt_intWrap(addr->type)) == NULL || - PyDict_SetItem(py_addr, py_iname, py_ivalue) < 0) { - Py_XDECREF(py_iname); - Py_XDECREF(py_ivalue); - goto error; - } + VIR_PY_DICT_SET_GOTO(py_addr, libvirt_constcharPtrWrap("addr"), + libvirt_constcharPtrWrap(addr->addr), error); + VIR_PY_DICT_SET_GOTO(py_addr, libvirt_constcharPtrWrap("prefix"), + libvirt_uintWrap(addr->prefix), error); + VIR_PY_DICT_SET_GOTO(py_addr, libvirt_constcharPtrWrap("type"), + libvirt_intWrap(addr->type), error); } }
@@ -6171,28 +6112,34 @@ libvirt_virConnectDomainEventGraphicsCallback(virConnectPtr conn ATTRIBUTE_UNUSE if ((pyobj_local = PyDict_New()) == NULL) goto cleanup;
- PyDict_SetItem(pyobj_local, - libvirt_constcharPtrWrap("family"), - libvirt_intWrap(local->family)); - PyDict_SetItem(pyobj_local, - libvirt_constcharPtrWrap("node"), - libvirt_constcharPtrWrap(local->node)); - PyDict_SetItem(pyobj_local, - libvirt_constcharPtrWrap("service"), - libvirt_constcharPtrWrap(local->service)); + VIR_PY_DICT_SET_GOTO(pyobj_local, + libvirt_constcharPtrWrap("family"), + libvirt_intWrap(local->family), + cleanup); + VIR_PY_DICT_SET_GOTO(pyobj_local, + libvirt_constcharPtrWrap("node"), + libvirt_constcharPtrWrap(local->node), + cleanup); + VIR_PY_DICT_SET_GOTO(pyobj_local, + libvirt_constcharPtrWrap("service"), + libvirt_constcharPtrWrap(local->service), + cleanup);
if ((pyobj_remote = PyDict_New()) == NULL) goto cleanup;
- PyDict_SetItem(pyobj_remote, - libvirt_constcharPtrWrap("family"), - libvirt_intWrap(remote->family)); - PyDict_SetItem(pyobj_remote, - libvirt_constcharPtrWrap("node"), - libvirt_constcharPtrWrap(remote->node)); - PyDict_SetItem(pyobj_remote, - libvirt_constcharPtrWrap("service"), - libvirt_constcharPtrWrap(remote->service)); + VIR_PY_DICT_SET_GOTO(pyobj_remote, + libvirt_constcharPtrWrap("family"), + libvirt_intWrap(remote->family), + cleanup); + VIR_PY_DICT_SET_GOTO(pyobj_remote, + libvirt_constcharPtrWrap("node"), + libvirt_constcharPtrWrap(remote->node), + cleanup); + VIR_PY_DICT_SET_GOTO(pyobj_remote, + libvirt_constcharPtrWrap("service"), + libvirt_constcharPtrWrap(remote->service), + cleanup);
if ((pyobj_subject = PyList_New(subject->nidentity)) == NULL) goto cleanup; @@ -8011,15 +7958,10 @@ libvirt_virDomainGetTime(PyObject *self ATTRIBUTE_UNUSED, goto cleanup; }
- if (!(pyobj_seconds = libvirt_longlongWrap(seconds)) || - PyDict_SetItemString(dict, "seconds", pyobj_seconds) < 0) - goto cleanup; - Py_DECREF(pyobj_seconds); - - if (!(pyobj_nseconds = libvirt_uintWrap(nseconds)) || - PyDict_SetItemString(dict, "nseconds", pyobj_nseconds) < 0) - goto cleanup; - Py_DECREF(pyobj_nseconds); + VIR_PY_DICT_SET_GOTO(dict, libvirt_constcharPtrWrap("seconds"), + libvirt_longlongWrap(seconds), cleanup); + VIR_PY_DICT_SET_GOTO(dict, libvirt_constcharPtrWrap("nseconds"), + libvirt_longlongWrap(nseconds), cleanup);
build issue - 'pyobj_seconds' and 'pyobj_nseconds' no longer necessary
The rest seemed OK
John
py_retval = dict; dict = NULL; @@ -8148,35 +8090,18 @@ libvirt_virNodeGetFreePages(PyObject *self ATTRIBUTE_UNUSED,
for (i = 0; i < c_retval;) { PyObject *per_node = NULL; - PyObject *node = NULL;
- if (!(per_node = PyDict_New()) || - !(node = libvirt_intWrap(startCell + i/pyobj_pagesize_size))) { - Py_XDECREF(per_node); - Py_XDECREF(node); + if (!(per_node = PyDict_New())) goto cleanup; - }
- if (PyDict_SetItem(pyobj_counts, node, per_node) < 0) { - Py_XDECREF(per_node); - Py_XDECREF(node); - goto cleanup; - } + VIR_PY_DICT_SET_GOTO(pyobj_counts, + libvirt_intWrap(startCell + i/pyobj_pagesize_size), + per_node, cleanup); + + for (j = 0; j < pyobj_pagesize_size; j ++) + VIR_PY_DICT_SET_GOTO(per_node, libvirt_intWrap(pages[j]), + libvirt_intWrap(counts[i + j]), cleanup);
- for (j = 0; j < pyobj_pagesize_size; j ++) { - PyObject *page = NULL; - PyObject *count = NULL; - - if (!(page = libvirt_intWrap(pages[j])) || - !(count = libvirt_intWrap(counts[i + j])) || - PyDict_SetItem(per_node, page, count) < 0) { - Py_XDECREF(page); - Py_XDECREF(count); - Py_XDECREF(per_node); - Py_XDECREF(node); - goto cleanup; - } - } i += pyobj_pagesize_size; }
@@ -8230,30 +8155,24 @@ libvirt_virNetworkGetDHCPLeases(PyObject *self ATTRIBUTE_UNUSED,
VIR_PY_LIST_SET_GOTO(py_retval, i, py_lease, error);
-#define VIR_SET_LEASE_ITEM(NAME, VALUE_OBJ_FUNC) \ - do { \ - PyObject *tmp_val; \ - \ - if (!(tmp_val = VALUE_OBJ_FUNC)) \ - goto error; \ - \ - if (PyDict_SetItemString(py_lease, NAME, tmp_val) < 0) { \ - Py_DECREF(tmp_val); \ - goto error; \ - } \ - } while (0) - - VIR_SET_LEASE_ITEM("iface", libvirt_charPtrWrap(lease->iface)); - VIR_SET_LEASE_ITEM("expirytime", libvirt_longlongWrap(lease->expirytime)); - VIR_SET_LEASE_ITEM("type", libvirt_intWrap(lease->type)); - VIR_SET_LEASE_ITEM("mac", libvirt_charPtrWrap(lease->mac)); - VIR_SET_LEASE_ITEM("ipaddr", libvirt_charPtrWrap(lease->ipaddr)); - VIR_SET_LEASE_ITEM("prefix", libvirt_uintWrap(lease->prefix)); - VIR_SET_LEASE_ITEM("hostname", libvirt_charPtrWrap(lease->hostname)); - VIR_SET_LEASE_ITEM("clientid", libvirt_charPtrWrap(lease->clientid)); - VIR_SET_LEASE_ITEM("iaid", libvirt_charPtrWrap(lease->iaid)); - -#undef VIR_SET_LEASE_ITEM + VIR_PY_DICT_SET_GOTO(py_lease, libvirt_constcharPtrWrap("iface"), + libvirt_charPtrWrap(lease->iface), error); + VIR_PY_DICT_SET_GOTO(py_lease, libvirt_constcharPtrWrap("expirytime"), + libvirt_longlongWrap(lease->expirytime), error); + VIR_PY_DICT_SET_GOTO(py_lease, libvirt_constcharPtrWrap("type"), + libvirt_intWrap(lease->type), error); + VIR_PY_DICT_SET_GOTO(py_lease, libvirt_constcharPtrWrap("mac"), + libvirt_charPtrWrap(lease->mac), error); + VIR_PY_DICT_SET_GOTO(py_lease, libvirt_constcharPtrWrap("ipaddr"), + libvirt_charPtrWrap(lease->ipaddr), error); + VIR_PY_DICT_SET_GOTO(py_lease, libvirt_constcharPtrWrap("prefix"), + libvirt_uintWrap(lease->prefix), error); + VIR_PY_DICT_SET_GOTO(py_lease, libvirt_constcharPtrWrap("hostname"), + libvirt_charPtrWrap(lease->hostname), error); + VIR_PY_DICT_SET_GOTO(py_lease, libvirt_constcharPtrWrap("clientid"), + libvirt_charPtrWrap(lease->clientid), error); + VIR_PY_DICT_SET_GOTO(py_lease, libvirt_constcharPtrWrap("iaid"), + libvirt_charPtrWrap(lease->iaid), error); }
cleanup: diff --git a/libvirt-utils.c b/libvirt-utils.c index 02a28ac..2bf7519 100644 --- a/libvirt-utils.c +++ b/libvirt-utils.c @@ -267,22 +267,13 @@ getPyVirTypedParameter(const virTypedParameter *params, }
key = libvirt_constcharPtrWrap(params[i].field); - if (!key || !val) - goto cleanup; - - if (PyDict_SetItem(info, key, val) < 0) { - Py_DECREF(info); - goto cleanup; - }
- Py_DECREF(key); - Py_DECREF(val); + VIR_PY_DICT_SET_GOTO(info, key, val, cleanup); } return info;
cleanup: - Py_XDECREF(key); - Py_XDECREF(val); + Py_DECREF(info); return NULL; }

Coverity cannot introspect the cpython code and it thinks, that if the PyTuple_New or similar will always give the same result. In functions where the python function is called more than once with the same arguments, it will assume that if the first call don't return NULL, then also the every other call cannot return NULL. This is a wrong assumption and it's a false-positive. Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libvirt-override.c b/libvirt-override.c index 3192e74..5330d0f 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -5409,6 +5409,7 @@ libvirt_virEventAddTimeoutFunc(int timeout, Py_INCREF(python_cb); VIR_PY_TUPLE_SET_GOTO(pyobj_args, 1, python_cb, cleanup); + /* coverity[notnull] */ if ((cb_args = PyTuple_New(3)) == NULL) goto cleanup; @@ -6125,6 +6126,7 @@ libvirt_virConnectDomainEventGraphicsCallback(virConnectPtr conn ATTRIBUTE_UNUSE libvirt_constcharPtrWrap(local->service), cleanup); + /* coverity[notnull] */ if ((pyobj_remote = PyDict_New()) == NULL) goto cleanup; -- 2.5.3

On 09/24/2015 10:02 AM, Pavel Hrdina wrote:
Coverity cannot introspect the cpython code and it thinks, that if the PyTuple_New or similar will always give the same result. In functions where the python function is called more than once with the same arguments, it will assume that if the first call don't return NULL, then also the every other call cannot return NULL. This is a wrong assumption and it's a false-positive.
My turn to make the obvious question... Have you asked the Coverity folks? This just seems very strange. I agree it seems to be a false positive, but something isn't adding up. John
Signed-off-by: Pavel Hrdina <phrdina@redhat.com> --- libvirt-override.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/libvirt-override.c b/libvirt-override.c index 3192e74..5330d0f 100644 --- a/libvirt-override.c +++ b/libvirt-override.c @@ -5409,6 +5409,7 @@ libvirt_virEventAddTimeoutFunc(int timeout, Py_INCREF(python_cb); VIR_PY_TUPLE_SET_GOTO(pyobj_args, 1, python_cb, cleanup);
+ /* coverity[notnull] */ if ((cb_args = PyTuple_New(3)) == NULL) goto cleanup;
@@ -6125,6 +6126,7 @@ libvirt_virConnectDomainEventGraphicsCallback(virConnectPtr conn ATTRIBUTE_UNUSE libvirt_constcharPtrWrap(local->service), cleanup);
+ /* coverity[notnull] */ if ((pyobj_remote = PyDict_New()) == NULL) goto cleanup;

On 09/24/2015 10:01 AM, Pavel Hrdina wrote:
This patch series tries to cleanup the libvirt-python C code and also make it more readable. It also fixes places, where we didn't checked for return values and where we also returned wrong values in case of errors. There are some other minor issues, that I've found.
Pavel Hrdina (23): update virDomainGetVcpus xml API description refactor the function to not override python exceptions remove useless check for NULL before Py_XDECREF drop unnecessary goto Move utils and shared code into libvirt-utils cleanup functions definition indent labels by one space fix indentation wrap lines to 80 columns Return NULL if python exception is set Return correct python object Return NULL and set an exception if allocation fails Use VIR_PY_NONE instead use Py_CLEAR instead of Py_XDECREF followed by NULL assignment all Py*_New function has to be checked for return value change the order of some statements drop unnecessary py_retval variable improve usage of cleanup paths utils: introduce new macro helpers for tuple, list and dict objects use VIR_PY_TUPLE_GOTO use VYR_PY_LIST_SET_GOTO and VIR_PY_LIST_APPEND_GOTO use VIR_PY_DICT_SET_GOTO coverity: resolve dead_error_condition
libvirt-lxc-override.c | 61 +- libvirt-override-api.xml | 4 +- libvirt-override.c | 3156 +++++++++++++++++++++------------------------- libvirt-qemu-override.c | 60 +- libvirt-utils.c | 422 ++++++- libvirt-utils.h | 133 ++ typewrappers.c | 65 +- 7 files changed, 2047 insertions(+), 1854 deletions(-)
*Lots* of monotonous changes... I have to assume for those places where you've changed return values and "followed the rules" regarding what gets returned when, you ended up going through all functions (a tedious task). Obviously I couldn't do the same, so I do trust you've followed those unwritten rules (or are they written somewhere? Maybe updating "HACKING" would help; otherwise, you ended up having to be very vigilant with every change. If I commented on something - it would need adjustment before push If I didn't comment on something, then an implicit ACK may be assumed. Would have been a lot easier to have 3 groups of 8 (or so) rather than one group of 23 ;-)... Especially those long patches, but I understand why it was done at all one time. Hopefully it's a lot easier to maintain - I do think it would be wise to create some 'rules' or 'guidelines' in HACKING (assuming anyone reads it). If they don't and mess up, you can always point them at the document during review. Lots and lots of error path cleanup, which is great! It'll be interesting if any 'consumer' up our short stack starts tripping on these changes. Might be good to give perhaps a strong heads up to allow time for them to "ferret out" any issues... John

On Sat, Sep 26, 2015 at 10:52:27AM -0400, John Ferlan wrote:
On 09/24/2015 10:01 AM, Pavel Hrdina wrote:
This patch series tries to cleanup the libvirt-python C code and also make it more readable. It also fixes places, where we didn't checked for return values and where we also returned wrong values in case of errors. There are some other minor issues, that I've found.
Pavel Hrdina (23): update virDomainGetVcpus xml API description refactor the function to not override python exceptions remove useless check for NULL before Py_XDECREF drop unnecessary goto Move utils and shared code into libvirt-utils cleanup functions definition indent labels by one space fix indentation wrap lines to 80 columns Return NULL if python exception is set Return correct python object Return NULL and set an exception if allocation fails Use VIR_PY_NONE instead use Py_CLEAR instead of Py_XDECREF followed by NULL assignment all Py*_New function has to be checked for return value change the order of some statements drop unnecessary py_retval variable improve usage of cleanup paths utils: introduce new macro helpers for tuple, list and dict objects use VIR_PY_TUPLE_GOTO use VYR_PY_LIST_SET_GOTO and VIR_PY_LIST_APPEND_GOTO use VIR_PY_DICT_SET_GOTO coverity: resolve dead_error_condition
libvirt-lxc-override.c | 61 +- libvirt-override-api.xml | 4 +- libvirt-override.c | 3156 +++++++++++++++++++++------------------------- libvirt-qemu-override.c | 60 +- libvirt-utils.c | 422 ++++++- libvirt-utils.h | 133 ++ typewrappers.c | 65 +- 7 files changed, 2047 insertions(+), 1854 deletions(-)
*Lots* of monotonous changes... I have to assume for those places where you've changed return values and "followed the rules" regarding what gets returned when, you ended up going through all functions (a tedious task). Obviously I couldn't do the same, so I do trust you've followed those unwritten rules (or are they written somewhere? Maybe updating "HACKING" would help; otherwise, you ended up having to be very vigilant with every change.
Actually the rule is written somewere in the cpython documentation. It would be probably worth mentioning it in HACKING.
If I commented on something - it would need adjustment before push
If I didn't comment on something, then an implicit ACK may be assumed.
I'll fix the nits you've found and probably send few v2 patches to be reviewed again.
Would have been a lot easier to have 3 groups of 8 (or so) rather than one group of 23 ;-)... Especially those long patches, but I understand why it was done at all one time.
It would have been a lot easier, but I started with just a simple cleanup and ended up whit those 23 patches :)
Hopefully it's a lot easier to maintain - I do think it would be wise to create some 'rules' or 'guidelines' in HACKING (assuming anyone reads it). If they don't and mess up, you can always point them at the document during review.
Lots and lots of error path cleanup, which is great! It'll be interesting if any 'consumer' up our short stack starts tripping on these changes. Might be good to give perhaps a strong heads up to allow time for them to "ferret out" any issues...
I've tried to run virt-manager tests on top of those changes in libvirt-python and there was no issue at all, so we will see :) Thanks for the review, Pavel
John
participants (2)
-
John Ferlan
-
Pavel Hrdina