summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Adam <obnox@samba.org>2011-08-17 10:50:31 +0200
committerMichael Adam <obnox@samba.org>2011-10-11 14:17:57 +0200
commitff7918770db3be78a22d0be83415698ad03036e0 (patch)
tree884e83bf047651f30a740ec711b4d0db79e7f2e7
parent248cb2310c1b338da60d7849c8006a4a5ad5fa84 (diff)
downloadsamba-ff7918770db3be78a22d0be83415698ad03036e0.tar.gz
samba-ff7918770db3be78a22d0be83415698ad03036e0.tar.bz2
samba-ff7918770db3be78a22d0be83415698ad03036e0.zip
s3:talloc_dict: change to only use dbwrap wrapper functions
Avoid direct use of the db_record and db_context structs.
-rw-r--r--source3/lib/talloc_dict.c56
1 files changed, 39 insertions, 17 deletions
diff --git a/source3/lib/talloc_dict.c b/source3/lib/talloc_dict.c
index b7d4fe0dab..71ab899006 100644
--- a/source3/lib/talloc_dict.c
+++ b/source3/lib/talloc_dict.c
@@ -56,29 +56,34 @@ bool talloc_dict_set(struct talloc_dict *dict, DATA_BLOB key, void *pdata)
struct db_record *rec;
NTSTATUS status = NT_STATUS_OK;
void *data = *(void **)pdata;
+ TDB_DATA value;
- rec = dict->db->fetch_locked(dict->db, talloc_tos(),
- make_tdb_data(key.data, key.length));
+ rec = dbwrap_fetch_locked(dict->db, talloc_tos(),
+ make_tdb_data(key.data, key.length));
if (rec == NULL) {
return false;
}
- if (rec->value.dsize != 0) {
+
+ value = dbwrap_record_get_value(rec);
+
+ if (value.dsize != 0) {
void *old_data;
- if (rec->value.dsize != sizeof(void *)) {
+ if (value.dsize != sizeof(void *)) {
TALLOC_FREE(rec);
return false;
}
- old_data = *(void **)(rec->value.dptr);
+ old_data = *(void **)(value.dptr);
TALLOC_FREE(old_data);
if (data == NULL) {
- status = rec->delete_rec(rec);
+ status = dbwrap_record_delete(rec);
}
}
if (data != NULL) {
void *mydata = talloc_move(dict->db, &data);
*(void **)pdata = NULL;
- status = rec->store(rec, make_tdb_data((uint8_t *)&mydata,
- sizeof(mydata)), 0);
+ status = dbwrap_record_store(rec,
+ make_tdb_data((uint8_t *)&mydata,
+ sizeof(mydata)), 0);
}
TALLOC_FREE(rec);
return NT_STATUS_IS_OK(status);
@@ -94,21 +99,24 @@ void *talloc_dict_fetch(struct talloc_dict *dict, DATA_BLOB key,
{
struct db_record *rec;
void *result;
+ TDB_DATA value;
- rec = dict->db->fetch_locked(dict->db, talloc_tos(),
- make_tdb_data(key.data, key.length));
+ rec = dbwrap_fetch_locked(dict->db, talloc_tos(),
+ make_tdb_data(key.data, key.length));
if (rec == NULL) {
return NULL;
}
- if (rec->value.dsize != sizeof(void *)) {
+
+ value = dbwrap_record_get_value(rec);
+ if (value.dsize != sizeof(void *)) {
TALLOC_FREE(rec);
return NULL;
}
- result = *(void **)rec->value.dptr;
+ result = *(void **)value.dptr;
if (mem_ctx != NULL) {
NTSTATUS status;
- status = rec->delete_rec(rec);
+ status = dbwrap_record_delete(rec);
if (!NT_STATUS_IS_OK(status)) {
TALLOC_FREE(rec);
return NULL;
@@ -126,14 +134,19 @@ struct talloc_dict_traverse_state {
static int talloc_dict_traverse_fn(struct db_record *rec, void *private_data)
{
+ TDB_DATA key;
+ TDB_DATA value;
struct talloc_dict_traverse_state *state =
(struct talloc_dict_traverse_state *)private_data;
- if (rec->value.dsize != sizeof(void *)) {
+ key = dbwrap_record_get_key(rec);
+ value = dbwrap_record_get_value(rec);
+
+ if (value.dsize != sizeof(void *)) {
return -1;
}
- return state->fn(data_blob_const(rec->key.dptr, rec->key.dsize),
- *(void **)rec->value.dptr, state->private_data);
+ return state->fn(data_blob_const(key.dptr, key.dsize),
+ *(void **)value.dptr, state->private_data);
}
/*
@@ -146,7 +159,16 @@ int talloc_dict_traverse(struct talloc_dict *dict,
void *private_data)
{
struct talloc_dict_traverse_state state;
+ NTSTATUS status;
+ int count = 0;
+
state.fn = fn;
state.private_data = private_data;
- return dict->db->traverse(dict->db, talloc_dict_traverse_fn, &state);
+ status = dbwrap_traverse(dict->db, talloc_dict_traverse_fn, &state,
+ &count);
+ if (!NT_STATUS_IS_OK(status)) {
+ return -1;
+ } else {
+ return count;
+ }
}