summaryrefslogtreecommitdiff
path: root/source3/lib/dbwrap/dbwrap_tdb.c
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2011-12-08 15:50:33 +0100
committerMichael Adam <obnox@samba.org>2011-12-15 16:00:45 +0100
commit26fc72921f7b72dfebfe8394baa85b81ef66d26d (patch)
treead66ef76af07e27e13a956ff79431ce80590b97c /source3/lib/dbwrap/dbwrap_tdb.c
parent19078b9b0564ed2654a1dae1d23488f89aadb41f (diff)
downloadsamba-26fc72921f7b72dfebfe8394baa85b81ef66d26d.tar.gz
samba-26fc72921f7b72dfebfe8394baa85b81ef66d26d.tar.bz2
samba-26fc72921f7b72dfebfe8394baa85b81ef66d26d.zip
s3-dbwrap: Make dbwrap_parse_record return NTSTATUS
Also, the parser now returns void. The parser is called if and only if dbwrap_parse_record returns NT_STATUS_OK. Signed-off-by: Michael Adam <obnox@samba.org>
Diffstat (limited to 'source3/lib/dbwrap/dbwrap_tdb.c')
-rw-r--r--source3/lib/dbwrap/dbwrap_tdb.c36
1 files changed, 31 insertions, 5 deletions
diff --git a/source3/lib/dbwrap/dbwrap_tdb.c b/source3/lib/dbwrap/dbwrap_tdb.c
index fbb05cc2a8..efdb5dbee4 100644
--- a/source3/lib/dbwrap/dbwrap_tdb.c
+++ b/source3/lib/dbwrap/dbwrap_tdb.c
@@ -218,15 +218,41 @@ static int db_tdb_wipe(struct db_context *db)
return tdb_wipe_all(ctx->wtdb->tdb);
}
-static int db_tdb_parse(struct db_context *db, TDB_DATA key,
- int (*parser)(TDB_DATA key, TDB_DATA data,
- void *private_data),
- void *private_data)
+struct db_tdb_parse_state {
+ void (*parser)(TDB_DATA key, TDB_DATA data,
+ void *private_data);
+ void *private_data;
+};
+
+/*
+ * tdb_parse_record expects a parser returning int, mixing up tdb and
+ * parser errors. Wrap around that by always returning 0 and have
+ * dbwrap_parse_record expect a parser returning void.
+ */
+
+static int db_tdb_parser(TDB_DATA key, TDB_DATA data, void *private_data)
+{
+ struct db_tdb_parse_state *state =
+ (struct db_tdb_parse_state *)private_data;
+ state->parser(key, data, state->private_data);
+ return 0;
+}
+
+static NTSTATUS db_tdb_parse(struct db_context *db, TDB_DATA key,
+ void (*parser)(TDB_DATA key, TDB_DATA data,
+ void *private_data),
+ void *private_data)
{
struct db_tdb_ctx *ctx = talloc_get_type_abort(
db->private_data, struct db_tdb_ctx);
+ struct db_tdb_parse_state state;
+ int ret;
+
+ state.parser = parser;
+ state.private_data = private_data;
- return tdb_parse_record(ctx->wtdb->tdb, key, parser, private_data) ? -1 : 0;
+ ret = tdb_parse_record(ctx->wtdb->tdb, key, db_tdb_parser, &state);
+ return map_nt_error_from_tdb(ret);
}
static NTSTATUS db_tdb_store(struct db_record *rec, TDB_DATA data, int flag)