From f7313eeaf3b64fafa792a225a2b70c745e8d5cc6 Mon Sep 17 00:00:00 2001
From: Uwe Hermann <uwe@hermann-uwe.de>
Date: Thu, 27 Jan 2011 23:02:39 +0100
Subject: 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;
 }
 
 /**
-- 
cgit v1.2.3-70-g09d2