summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--c_src/permdb.c7
-rw-r--r--c_src/permdb.h3
-rw-r--r--c_src/permdbpy.c3
3 files changed, 13 insertions, 0 deletions
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);