[PATCH 08/14] pytdb: Add non-freeing variant of PyString_FromTDB_DATA
Kirill Smelkov
kirr at landau.phys.spbu.ru
Sat Oct 2 07:43:47 MDT 2010
From: Kirill Smelkov <kirr at mns.spb.ru>
At present PyString_FromTDB_DATA(data), always frees data.dptr .
This is convenient when data is used only as temporary value before
converting e.g. result to Python, but inappropriate, when we should not
free data.dptr at all.
Not freeing data is needed e.g. in function called from-inside
tdb_traverse, for which pytdb support comes next.
Signed-off-by: Kirill Smelkov <kirr at mns.spb.ru>
---
lib/tdb/pytdb.c | 10 ++++++++--
1 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/lib/tdb/pytdb.c b/lib/tdb/pytdb.c
index 0ea6053..2f54fcf 100644
--- a/lib/tdb/pytdb.c
+++ b/lib/tdb/pytdb.c
@@ -57,18 +57,24 @@ static TDB_DATA PyString_AsTDB_DATA(PyObject *data)
return ret;
}
-static PyObject *PyString_FromTDB_DATA(TDB_DATA data)
+static PyObject *__PyString_FromTDB_DATA(TDB_DATA data, bool release)
{
if (data.dptr == NULL && data.dsize == 0) {
Py_RETURN_NONE;
} else {
PyObject *ret = PyString_FromStringAndSize((const char *)data.dptr,
data.dsize);
- free(data.dptr);
+ if (release)
+ free(data.dptr);
return ret;
}
}
+static PyObject *PyString_FromTDB_DATA(TDB_DATA data)
+{
+ return __PyString_FromTDB_DATA(data, /*release=*/true);
+}
+
/* parse `PyObject *args` into TDB_DATA and store result in *dptr */
#define PyTdb_ARGS_AS_TDBDATA(args, dptr) do { \
PyObject *py_obj; \
--
1.7.3.1.50.g1e633
More information about the samba-technical
mailing list