From 5095733f923158701fb5a566cd16c2112d51e1c4 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Wed, 9 Nov 2016 16:34:28 +0100 Subject: dbwrap: Convert dbwrap_store to dbwrap_do_locked Signed-off-by: Volker Lendecke Reviewed-by: Jeremy Allison --- lib/dbwrap/dbwrap.c | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) (limited to 'lib/dbwrap') diff --git a/lib/dbwrap/dbwrap.c b/lib/dbwrap/dbwrap.c index 22437f62083..0e576b30f60 100644 --- a/lib/dbwrap/dbwrap.c +++ b/lib/dbwrap/dbwrap.c @@ -301,22 +301,30 @@ bool dbwrap_exists(struct db_context *db, TDB_DATA key) return (result == 1); } +struct dbwrap_store_state { + TDB_DATA data; + int flags; + NTSTATUS status; +}; + +static void dbwrap_store_fn(struct db_record *rec, void *private_data) +{ + struct dbwrap_store_state *state = private_data; + state->status = dbwrap_record_store(rec, state->data, state->flags); +} + NTSTATUS dbwrap_store(struct db_context *db, TDB_DATA key, TDB_DATA data, int flags) { - struct db_record *rec; + struct dbwrap_store_state state = { .data = data, .flags = flags }; NTSTATUS status; - TALLOC_CTX *frame = talloc_stackframe(); - rec = dbwrap_fetch_locked(db, frame, key); - if (rec == NULL) { - TALLOC_FREE(frame); - return NT_STATUS_NO_MEMORY; + status = dbwrap_do_locked(db, key, dbwrap_store_fn, &state); + if (!NT_STATUS_IS_OK(status)) { + return status; } - status = dbwrap_record_store(rec, data, flags); - TALLOC_FREE(frame); - return status; + return state.status; } NTSTATUS dbwrap_delete(struct db_context *db, TDB_DATA key) -- cgit v1.2.1