diff options
author | Jule Anger <ja@sernet.de> | 2020-04-28 17:00:46 +0200 |
---|---|---|
committer | Ralph Boehme <slow@samba.org> | 2020-05-05 09:40:26 +0000 |
commit | 4d42497441c8e5308c6578845c3c5e858bc63fbf (patch) | |
tree | c60530270c3ad6bb2404465e16c2dd2baf832264 /lib/tdb | |
parent | 29cbfd0ba39505ae51442b086fe58bda38c54a69 (diff) | |
download | samba-4d42497441c8e5308c6578845c3c5e858bc63fbf.tar.gz |
pytdb: add python binding for storev()
Signed-off-by: Jule Anger <ja@sernet.de>
Reviewed-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
Diffstat (limited to 'lib/tdb')
-rw-r--r-- | lib/tdb/pytdb.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/lib/tdb/pytdb.c b/lib/tdb/pytdb.c index 5ff1ef83117..69da98c34d4 100644 --- a/lib/tdb/pytdb.c +++ b/lib/tdb/pytdb.c @@ -381,6 +381,53 @@ static PyObject *obj_store(PyTdbObject *self, PyObject *args) Py_RETURN_NONE; } +static PyObject *obj_storev(PyTdbObject *self, PyObject *args) +{ + TDB_DATA key, *values, value; + int ret; + int flag = TDB_REPLACE; + Py_ssize_t num_values, i; + PyObject *py_key, *py_values, *py_value; + + PyErr_TDB_RAISE_IF_CLOSED(self); + + if (!PyArg_ParseTuple( + args, "OO!|i", &py_key, &PyList_Type, &py_values, &flag)) { + return NULL; + } + + num_values = PyList_Size(py_values); + + key = PyBytes_AsTDB_DATA(py_key); + if (key.dptr == NULL) { + return NULL; + } + + if (SSIZE_MAX/sizeof(TDB_DATA) < num_values) { + PyErr_SetFromErrno(PyExc_OverflowError); + return NULL; + } + values = malloc(sizeof(TDB_DATA) * num_values); + if (values == NULL) { + PyErr_NoMemory(); + return NULL; + } + for (i=0; i<num_values; i++) { + py_value = PyList_GetItem(py_values, i); + value = PyBytes_AsTDB_DATA(py_value); + if (!value.dptr) { + free(values); + return NULL; + } + values[i] = value; + } + + ret = tdb_storev(self->ctx, key, values, num_values, flag); + free(values); + PyErr_TDB_ERROR_IS_ERR_RAISE(ret, self->ctx); + Py_RETURN_NONE; +} + static PyObject *obj_add_flags(PyTdbObject *self, PyObject *args) { unsigned flags; @@ -525,6 +572,8 @@ static PyMethodDef tdb_object_methods[] = { #endif { "store", (PyCFunction)obj_store, METH_VARARGS, "S.store(key, data, flag=REPLACE) -> None" "Store data." }, + { "storev", (PyCFunction)obj_storev, METH_VARARGS, "S.storev(key, data, flag=REPLACE) -> None" + "Store several data." }, { "add_flags", (PyCFunction)obj_add_flags, METH_VARARGS, "S.add_flags(flags) -> None" }, { "remove_flags", (PyCFunction)obj_remove_flags, METH_VARARGS, "S.remove_flags(flags) -> None" }, #if PY_MAJOR_VERSION >= 3 |