From 01ff056a55b198b91ef327d7ca223bab9452034c Mon Sep 17 00:00:00 2001 From: Detlev Casanova Date: Thu, 15 Jul 2010 12:09:26 +0200 Subject: Get to work with the changes in layman. Fix most of the memory leaks --- src/config.c | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) (limited to 'src/config.c') diff --git a/src/config.c b/src/config.c index 624f1ab..47d4437 100644 --- a/src/config.c +++ b/src/config.c @@ -57,16 +57,44 @@ const char* bareConfigGetDefaultValue(BareConfig* cfg, const char* opt) return NULL; if (PyDict_Contains(obj, PyBytes_FromString(opt))) - return PyBytes_AsString(PyDict_GetItem(obj, PyBytes_FromString(opt))); + { + PyObject *pyopt = PyBytes_FromString(opt); + char *tmp = PyBytes_AsString(PyDict_GetItem(obj, pyopt)); + Py_DECREF(pyopt); + + char *ret = malloc(sizeof(char) * strlen(tmp)); + strcpy(ret, tmp); + Py_DECREF(obj); + + return ret; + } else return ""; } +const char* bareConfigGetOptionValue(BareConfig* cfg, const char* opt) +{ + PyObject *obj = PyObject_CallMethod(cfg->object, "get_option", "(z)", opt); + char *tmp = PyBytes_AsString(obj); + char *ret = malloc(sizeof(char) * (strlen(tmp) + 1)); + + strcpy(ret, tmp); + + Py_DECREF(obj); + + return ret; +} + int bareConfigSetOptionValue(BareConfig* cfg, const char* opt, const char* val) { PyObject *obj = PyObject_CallMethod(cfg->object, "set_option", "(zz)", opt, val); + int ret; if (obj) - return 1; + ret = 1; else - return 0; + ret = 0; + + Py_DECREF(obj); + + return ret; } -- cgit v1.2.3-1-g7c22