From: Vivien Maisonneuve Date: Mon, 23 Jun 2014 09:09:03 +0000 (+0200) Subject: Exception handling in _isl.c X-Git-Tag: 1.0~218 X-Git-Url: https://scm.cri.ensmp.fr/git/linpy.git/commitdiff_plain/d9d050a1a44fd98d3f4553aeff16a0aa60ca8755 Exception handling in _isl.c --- diff --git a/pypol/_isl.c b/pypol/_isl.c index 828e10d..a62d650 100644 --- a/pypol/_isl.c +++ b/pypol/_isl.c @@ -12,10 +12,14 @@ typedef struct _isl_constraint_list _isl_constraint_list; int _isl_isl_basic_set_add_constraint_list(__isl_take isl_constraint *c, void *user) { _isl_constraint_list *list; + PyObject *value; list = (_isl_constraint_list *) user; - return PyList_SetItem(list->constraints, list->cursor++, - PyLong_FromVoidPtr(c)); + value = PyLong_FromVoidPtr(c); + if (value == NULL) { + return -1; + } + return PyList_SetItem(list->constraints, list->cursor++, value); } static PyObject * _isl_isl_basic_set_constraints(PyObject *self, @@ -30,13 +34,31 @@ static PyObject * _isl_isl_basic_set_constraints(PyObject *self, return NULL; bset = (isl_basic_set*) ptr; n = isl_basic_set_n_constraint(bset); + if (n == -1) { + PyErr_SetString(PyExc_RuntimeError, + "an error occurred in isl_basic_set_n_constraint"); + return NULL; + } constraints = PyList_New(n); + if (constraints == NULL) { + return NULL; + } list = malloc(sizeof(_isl_constraint_list)); + if (list == NULL) { + Py_DECREF(constraints); + return PyErr_NoMemory(); + } list->cursor = 0; list->constraints = constraints; - isl_basic_set_foreach_constraint(bset, + n = isl_basic_set_foreach_constraint(bset, _isl_isl_basic_set_add_constraint_list, list); free(list); + if (n == -1) { + PyErr_SetString(PyExc_RuntimeError, + "an error occurred in isl_basic_set_foreach_constraint"); + Py_DECREF(constraints); + return NULL; + } return constraints; } @@ -49,17 +71,20 @@ static struct PyModuleDef _islmodule = { PyModuleDef_HEAD_INIT, "_isl", NULL, - -1, + 0, _isl_methods }; PyMODINIT_FUNC PyInit__isl(void) { PyObject *m; m = PyModule_Create(&_islmodule); - if (m == NULL) + if (m == NULL) { return NULL; + } - PyModule_AddObject(m, "isl_dim_set", PyLong_FromLong(isl_dim_set)); + if (PyModule_AddObject(m, "isl_dim_set", PyLong_FromLong(isl_dim_set)) == -1) { + return NULL; + } return m; }