From f7313eeaf3b64fafa792a225a2b70c745e8d5cc6 Mon Sep 17 00:00:00 2001 From: Uwe Hermann Date: Thu, 27 Jan 2011 23:02:39 +0100 Subject: [PATCH] Some more simplifications in decode.c. --- decode.c | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) 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; } /** -- 2.30.2