summaryrefslogtreecommitdiff
path: root/lib/tdb2/tdb1_traverse.c
diff options
context:
space:
mode:
authorRusty Russell <rusty@rustcorp.com.au>2011-09-14 07:55:13 +0930
committerRusty Russell <rusty@rustcorp.com.au>2011-09-14 07:55:13 +0930
commit30294c7b91456dd49b89a9b26eb0b1066087815c (patch)
tree8bf72d6834fafb9e030d120e7f6c881068cdb3af /lib/tdb2/tdb1_traverse.c
parente6cbc0f00ec9ecb4c014ee484746d565382d5f67 (diff)
downloadsamba-30294c7b91456dd49b89a9b26eb0b1066087815c.tar.gz
samba-30294c7b91456dd49b89a9b26eb0b1066087815c.tar.bz2
samba-30294c7b91456dd49b89a9b26eb0b1066087815c.zip
tdb2: unify tdb1_traverse into tdb_traverse
Switch on the TDB_VERSION1 flag; we now only do a tdb1_traverse_read on a read-only database, as there is no tdb2 equivalent. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (Imported from CCAN commit cc2d609dfca7192305ad477b8c2b52cfdc1aa9be)
Diffstat (limited to 'lib/tdb2/tdb1_traverse.c')
-rw-r--r--lib/tdb2/tdb1_traverse.c20
1 files changed, 13 insertions, 7 deletions
diff --git a/lib/tdb2/tdb1_traverse.c b/lib/tdb2/tdb1_traverse.c
index 87e233b47f..63052854d5 100644
--- a/lib/tdb2/tdb1_traverse.c
+++ b/lib/tdb2/tdb1_traverse.c
@@ -144,8 +144,10 @@ static tdb1_off_t tdb1_next_lock(struct tdb_context *tdb, struct tdb1_traverse_l
a non-zero return value from fn() indicates that the traversal should stop
*/
static int tdb1_traverse_internal(struct tdb_context *tdb,
- tdb1_traverse_func fn, void *private_data,
- struct tdb1_traverse_lock *tl)
+ int (*fn)(struct tdb_context *,
+ TDB_DATA, TDB_DATA, void *),
+ void *private_data,
+ struct tdb1_traverse_lock *tl)
{
TDB_DATA key, dbuf;
struct tdb1_record rec;
@@ -213,10 +215,12 @@ out:
/*
- a write style traverse - temporarily marks the db read only
+ a read style traverse - only if db read only
*/
-int tdb1_traverse_read(struct tdb_context *tdb,
- tdb1_traverse_func fn, void *private_data)
+static int tdb1_traverse_read(struct tdb_context *tdb,
+ int (*fn)(struct tdb_context *,
+ TDB_DATA, TDB_DATA, void *),
+ void *private_data)
{
struct tdb1_traverse_lock tl = { NULL, 0, 0, F_RDLCK };
int ret;
@@ -244,12 +248,14 @@ int tdb1_traverse_read(struct tdb_context *tdb,
alignment restrictions malloc gives you.
*/
int tdb1_traverse(struct tdb_context *tdb,
- tdb1_traverse_func fn, void *private_data)
+ int (*fn)(struct tdb_context *, TDB_DATA, TDB_DATA, void *),
+ void *private_data)
{
struct tdb1_traverse_lock tl = { NULL, 0, 0, F_WRLCK };
int ret;
- if ((tdb->flags & TDB_RDONLY) || tdb->tdb1.traverse_read) {
+ /* If we're read-only, we don't have to write-lock whole db. */
+ if (tdb->flags & TDB_RDONLY) {
return tdb1_traverse_read(tdb, fn, private_data);
}