s3:dbwrap: factor out db_rpt_search_internal
authorGregor Beck <gbeck@sernet.de>
Mon, 4 Jul 2011 07:54:31 +0000 (09:54 +0200)
committerMichael Adam <obnox@samba.org>
Tue, 11 Oct 2011 13:33:17 +0000 (15:33 +0200)
Signed-off-by: Michael Adam <obnox@samba.org>
source3/lib/dbwrap_rbt.c

index af88c79e6a4fd6a8da6df28a8ec9db9f5358cc14..483fa15bda436ed697028e1453d95acab6419726 100644 (file)
@@ -285,8 +285,7 @@ static struct db_record *db_rbt_fetch_locked(struct db_context *db_ctx,
        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);
@@ -295,7 +294,6 @@ static int db_rbt_fetch(struct db_context *db, TALLOC_CTX *mem_ctx,
        bool found = false;
        struct db_rbt_node *r = NULL;
        TDB_DATA search_key, search_val;
-       uint8_t *result;
 
        n = ctx->tree.rb_node;
 
@@ -320,19 +318,33 @@ static int db_rbt_fetch(struct db_context *db, TALLOC_CTX *mem_ctx,
                }
        }
 
+       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;
 }