s3:dbwrap: add specific dbwrap_parse_record() implementation to dbwrap_rbt
authorGregor Beck <gbeck@sernet.de>
Tue, 5 Jul 2011 13:06:05 +0000 (15:06 +0200)
committerMichael Adam <obnox@samba.org>
Tue, 11 Oct 2011 12:17:55 +0000 (14:17 +0200)
Signed-off-by: Michael Adam <obnox@samba.org>
source3/lib/dbwrap/dbwrap_rbt.c

index 54d3fa3aae5a023b7e617f7121a68bdff88d7a69..3b5574a257b6419198a11d6ec647e359b03d2b28 100644 (file)
@@ -316,6 +316,20 @@ static int db_rbt_exists(struct db_context *db, TDB_DATA key)
        return db_rbt_search_internal(db, key, NULL);
 }
 
+static int db_rbt_parse_record(struct db_context *db, TDB_DATA key,
+                              int (*parser)(TDB_DATA key, TDB_DATA data,
+                                            void *private_data),
+                              void *private_data)
+{
+       struct db_rbt_search_result res;
+       bool found = db_rbt_search_internal(db, key, &res);
+
+       if (!found) {
+               return -1;
+       }
+       return parser(res.key, res.val, private_data);
+}
+
 static int db_rbt_fetch(struct db_context *db, TALLOC_CTX *mem_ctx,
                        TDB_DATA key, TDB_DATA *data)
 {
@@ -419,6 +433,7 @@ struct db_context *db_open_rbt(TALLOC_CTX *mem_ctx)
        result->transaction_commit = db_rbt_trans_dummy;
        result->transaction_cancel = db_rbt_trans_dummy;
        result->exists = db_rbt_exists;
+       result->parse_record = db_rbt_parse_record;
 
        return result;
 }