diff options
author | Volker Lendecke <vl@samba.org> | 2011-12-08 15:50:33 +0100 |
---|---|---|
committer | Michael Adam <obnox@samba.org> | 2011-12-15 16:00:45 +0100 |
commit | 26fc72921f7b72dfebfe8394baa85b81ef66d26d (patch) | |
tree | ad66ef76af07e27e13a956ff79431ce80590b97c /source3/lib/dbwrap/dbwrap_tdb.c | |
parent | 19078b9b0564ed2654a1dae1d23488f89aadb41f (diff) | |
download | samba-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.c | 36 |
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) |