From 5eecd85c8e9e9b52527859917cba0b68608b8c33 Mon Sep 17 00:00:00 2001 From: Magnus Ahltorp Date: Fri, 17 Mar 2017 01:09:01 +0100 Subject: Report errors as exceptions when called from python. --- c_src/permdb.c | 7 +++++++ c_src/permdb.h | 3 +++ c_src/permdbpy.c | 3 +++ 3 files changed, 13 insertions(+) diff --git a/c_src/permdb.c b/c_src/permdb.c index 6117ff6..242dacc 100644 --- a/c_src/permdb.c +++ b/c_src/permdb.c @@ -624,6 +624,13 @@ permdb_free(permdb_object *state) free(state); } +char * +get_permdb_error(permdb_object *state) +{ + return state->error; +} + + /* * Returns the two bits of KEY that are used for LEVEL, for a q=2 * tree. diff --git a/c_src/permdb.h b/c_src/permdb.h index 314b873..9d6cc17 100644 --- a/c_src/permdb.h +++ b/c_src/permdb.h @@ -24,6 +24,9 @@ struct permdb_object; typedef struct permdb_object permdb_object; +char * +get_permdb_error(permdb_object *state); + node_entry get_entry_in_node(node_object node, unsigned char n); diff --git a/c_src/permdbpy.c b/c_src/permdbpy.c index 491f759..da7fc8f 100644 --- a/c_src/permdbpy.c +++ b/c_src/permdbpy.c @@ -72,6 +72,7 @@ data_pread(PyObject *self, PyObject *args) unsigned char *result = read_internal_data(state->permdb, offset, length); if (result == NULL) { + PyErr_SetString(PyExc_RuntimeError, get_permdb_error(state->permdb)); return NULL; } @@ -123,6 +124,7 @@ addvalue_wrapper(PyObject *self, PyObject *args) (unsigned char *) data, datalength, 0); if (result < 0) { + PyErr_SetString(PyExc_RuntimeError, get_permdb_error(state->permdb)); return NULL; } else if (result == 0) { Py_INCREF(Py_False); @@ -188,6 +190,7 @@ committree_wrapper(PyObject *self, PyObject *args) int result = committree(state->permdb); if (result < 0) { + PyErr_SetString(PyExc_RuntimeError, get_permdb_error(state->permdb)); return NULL; } else { Py_INCREF(Py_None); -- cgit v1.1