return result;
}
-static int db_rbt_fetch(struct db_context *db, TALLOC_CTX *mem_ctx,
- TDB_DATA key, TDB_DATA *data)
+static bool db_rbt_search_internal(struct db_context *db, TDB_DATA key, TDB_DATA *data)
{
struct db_rbt_ctx *ctx = talloc_get_type_abort(
db->private_data, struct db_rbt_ctx);
bool found = false;
struct db_rbt_node *r = NULL;
TDB_DATA search_key, search_val;
- uint8_t *result;
n = ctx->tree.rb_node;
}
}
+ if (data != NULL && found) {
+ *data = search_val;
+ }
+ return found;
+}
+
+
+static int db_rbt_fetch(struct db_context *db, TALLOC_CTX *mem_ctx,
+ TDB_DATA key, TDB_DATA *data)
+{
+ TDB_DATA val;
+ uint8_t *result;
+
+ bool found = db_rbt_search_internal(db, key, &val);
+
if (!found) {
*data = tdb_null;
return 0;
}
- result = (uint8 *)talloc_memdup(mem_ctx, search_val.dptr,
- search_val.dsize);
+ result = (uint8_t*)talloc_memdup(mem_ctx, val.dptr, val.dsize);
if (result == NULL) {
return -1;
}
data->dptr = result;
- data->dsize = search_val.dsize;
+ data->dsize = val.dsize;
return 0;
}