diff options
Diffstat (limited to 'lib/tdb_compat/tdb_compat.c')
-rw-r--r-- | lib/tdb_compat/tdb_compat.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/lib/tdb_compat/tdb_compat.c b/lib/tdb_compat/tdb_compat.c index d736db1742..2e43564802 100644 --- a/lib/tdb_compat/tdb_compat.c +++ b/lib/tdb_compat/tdb_compat.c @@ -38,6 +38,26 @@ enum TDB_ERROR tdb_transaction_start_nonblock(struct tdb_context *tdb) return ecode; } +/* For TDB1 tdbs, read traverse vs normal matters: write traverse + locks the entire thing! */ +int64_t tdb_traverse_read_(struct tdb_context *tdb, + int (*fn)(struct tdb_context *, + TDB_DATA, TDB_DATA, + void *), + void *p) +{ + int64_t ret; + + if (tdb_get_flags(tdb) & TDB_RDONLY) { + return tdb_traverse(tdb, fn, p); + } + + tdb_add_flag(tdb, TDB_RDONLY); + ret = tdb_traverse(tdb, fn, p); + tdb_remove_flag(tdb, TDB_RDONLY); + return ret; +} + /* * This handles TDB_CLEAR_IF_FIRST. */ |