summaryrefslogtreecommitdiff
path: root/lib/dbwrap
diff options
context:
space:
mode:
Diffstat (limited to 'lib/dbwrap')
-rw-r--r--lib/dbwrap/dbwrap.c25
1 files changed, 16 insertions, 9 deletions
diff --git a/lib/dbwrap/dbwrap.c b/lib/dbwrap/dbwrap.c
index 0e576b30f60..e1d792fa2f8 100644
--- a/lib/dbwrap/dbwrap.c
+++ b/lib/dbwrap/dbwrap.c
@@ -327,20 +327,27 @@ NTSTATUS dbwrap_store(struct db_context *db, TDB_DATA key,
return state.status;
}
+struct dbwrap_delete_state {
+ NTSTATUS status;
+};
+
+static void dbwrap_delete_fn(struct db_record *rec, void *private_data)
+{
+ struct dbwrap_delete_state *state = private_data;
+ state->status = dbwrap_record_delete(rec);
+}
+
NTSTATUS dbwrap_delete(struct db_context *db, TDB_DATA key)
{
- struct db_record *rec;
+ struct dbwrap_delete_state state;
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_delete_fn, &state);
+ if (!NT_STATUS_IS_OK(status)) {
+ return status;
}
- status = dbwrap_record_delete(rec);
- TALLOC_FREE(frame);
- return status;
+
+ return state.status;
}
NTSTATUS dbwrap_traverse(struct db_context *db,