From: Uwe Hermann Date: Thu, 27 Jan 2011 22:02:39 +0000 (+0100) Subject: Some more simplifications in decode.c. X-Git-Tag: libsigrokdecode-0.1.0~299 X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=f7313eeaf3b64fafa792a225a2b70c745e8d5cc6;p=libsigrokdecode.git Some more simplifications in decode.c. --- diff --git a/decode.c b/decode.c index 057515f..76f6317 100644 --- a/decode.c +++ b/decode.c @@ -107,14 +107,12 @@ static int h_str(PyObject *py_res, PyObject *py_func, PyObject *py_mod, { PyObject *py_str; char *str; + int ret; py_str = PyMapping_GetItemString(py_res, (char *)key); if (!py_str || !PyString_Check(py_str)) { - if (PyErr_Occurred()) - PyErr_Print(); /* Returns void. */ - Py_XDECREF(py_func); - Py_XDECREF(py_mod); - return SIGROKDECODE_ERR_PYTHON; /* TODO: More specific error? */ + ret = SIGROKDECODE_ERR_PYTHON; /* TODO: More specific error? */ + goto err_h_decref_func; } /* @@ -123,26 +121,30 @@ static int h_str(PyObject *py_res, PyObject *py_func, PyObject *py_mod, * must not be free()'d. */ if (!(str = PyString_AsString(py_str))) { - if (PyErr_Occurred()) - PyErr_Print(); /* Returns void. */ - Py_XDECREF(py_str); - Py_XDECREF(py_func); - Py_XDECREF(py_mod); - return SIGROKDECODE_ERR_PYTHON; /* TODO: More specific error? */ + ret = SIGROKDECODE_ERR_PYTHON; /* TODO: More specific error? */ + goto err_h_decref_str; } if (!(*outstr = strdup(str))) { - if (PyErr_Occurred()) - PyErr_Print(); /* Returns void. */ - Py_XDECREF(py_str); - Py_XDECREF(py_func); - Py_XDECREF(py_mod); - return SIGROKDECODE_ERR_MALLOC; + ret = SIGROKDECODE_ERR_MALLOC; + goto err_h_decref_str; } Py_XDECREF(py_str); return SIGROKDECODE_OK; + +err_h_decref_str: + Py_XDECREF(py_str); +err_h_decref_func: + Py_XDECREF(py_func); +err_h_decref_mod: + Py_XDECREF(py_mod); + + if (PyErr_Occurred()) + PyErr_Print(); /* Returns void. */ + + return ret; } /**