]> sigrok.org Git - libsigrokdecode.git/commitdiff
Some more simplifications in decode.c.
authorUwe Hermann <redacted>
Thu, 27 Jan 2011 22:02:39 +0000 (23:02 +0100)
committerUwe Hermann <redacted>
Thu, 27 Jan 2011 22:02:39 +0000 (23:02 +0100)
decode.c

index 057515f35509b50323780cf376565641f1da9832..76f6317eb51227761e30687ac0e73422f3f66f41 100644 (file)
--- 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;
 }
 
 /**