[PATCH 04/14] pytdb: Introduce PyTdb_ARGS_AS_TDBDATA helper

Kirill Smelkov kirr at landau.phys.spbu.ru
Sat Oct 2 07:43:43 MDT 2010


To parse `PyObject *args` into one TDBDATA.

This already reduces boilerplate code, but will help more in the next
patch, where there will be several fuctions (chainlock_*) which takes
key as the only argument.

Cc: 597386 at bugs.debian.org
Signed-off-by: Kirill Smelkov <kirr at landau.phys.spbu.ru>
---
 lib/tdb/pytdb.c |   30 ++++++++++++------------------
 1 files changed, 12 insertions(+), 18 deletions(-)

diff --git a/lib/tdb/pytdb.c b/lib/tdb/pytdb.c
index f5cb307..42df639 100644
--- a/lib/tdb/pytdb.c
+++ b/lib/tdb/pytdb.c
@@ -69,6 +69,14 @@ static PyObject *PyString_FromTDB_DATA(TDB_DATA data)
     }
 }
 
+/* parse `PyObject *args` into TDB_DATA and store result in *dptr */
+#define	PyTdb_ARGS_AS_TDBDATA(args, dptr) do {	\
+	PyObject *py_obj;	\
+	if (!PyArg_ParseTuple((args), "O", &py_obj))	\
+		return NULL;	\
+	*(dptr) = PyString_AsTDB_DATA(py_obj);	\
+} while (0)
+
 #define PyErr_TDB_ERROR_IS_ERR_RAISE(ret, tdb) \
 	if (ret != 0) { \
 		PyErr_SetTDBError(tdb); \
@@ -202,11 +210,7 @@ static PyObject *obj_close(PyTdbObject *self)
 static PyObject *obj_get(PyTdbObject *self, PyObject *args)
 {
 	TDB_DATA key;
-	PyObject *py_key;
-	if (!PyArg_ParseTuple(args, "O", &py_key))
-		return NULL;
-
-	key = PyString_AsTDB_DATA(py_key);
+	PyTdb_ARGS_AS_TDBDATA(args, &key);
 
 	return PyString_FromTDB_DATA(tdb_fetch(self->ctx, key));
 }
@@ -235,24 +239,17 @@ static PyObject *obj_firstkey(PyTdbObject *self)
 static PyObject *obj_nextkey(PyTdbObject *self, PyObject *args)
 {
 	TDB_DATA key;
-	PyObject *py_key;
-	if (!PyArg_ParseTuple(args, "O", &py_key))
-		return NULL;
+	PyTdb_ARGS_AS_TDBDATA(args, &key);
 
-	key = PyString_AsTDB_DATA(py_key);
-	
 	return PyString_FromTDB_DATA(tdb_nextkey(self->ctx, key));
 }
 
 static PyObject *obj_delete(PyTdbObject *self, PyObject *args)
 {
 	TDB_DATA key;
-	PyObject *py_key;
 	int ret;
-	if (!PyArg_ParseTuple(args, "O", &py_key))
-		return NULL;
+	PyTdb_ARGS_AS_TDBDATA(args, &key);
 
-	key = PyString_AsTDB_DATA(py_key);
 	ret = tdb_delete(self->ctx, key);
 	PyErr_TDB_ERROR_IS_ERR_RAISE(ret, self->ctx);
 	Py_RETURN_NONE;
@@ -262,11 +259,8 @@ static PyObject *obj_has_key(PyTdbObject *self, PyObject *args)
 {
 	TDB_DATA key;
 	int ret;
-	PyObject *py_key;
-	if (!PyArg_ParseTuple(args, "O", &py_key))
-		return NULL;
+	PyTdb_ARGS_AS_TDBDATA(args, &key);
 
-	key = PyString_AsTDB_DATA(py_key);
 	ret = tdb_exists(self->ctx, key);
 	if (ret != TDB_ERR_NOEXIST) {
 		PyErr_TDB_ERROR_IS_ERR_RAISE(ret, self->ctx);
-- 
1.7.3.1.50.g1e633


More information about the samba-technical mailing list