s3-talloc Change TALLOC_ZERO_P() to talloc_zero()
[samba.git] / source3 / lib / dbwrap_tdb.c
index 7bdadd37709526d1b18b0ab96a70a7218b436c89..f8baa0aeca8ff6a67c407c1ad72626fcb25386b7 100644 (file)
@@ -18,6 +18,8 @@
 */
 
 #include "includes.h"
+#include "dbwrap.h"
+#include "lib/util/tdb_wrap.h"
 
 struct db_tdb_ctx {
        struct tdb_wrap *wtdb;
@@ -31,14 +33,14 @@ static int db_tdb_record_destr(struct db_record* data)
        struct db_tdb_ctx *ctx =
                talloc_get_type_abort(data->private_data, struct db_tdb_ctx);
 
-       /* This hex_encode() call allocates memory on data context. By way how current 
+       /* This hex_encode_talloc() call allocates memory on data context. By way how current 
           __talloc_free() code works, it is OK to allocate in the destructor as 
           the children of data will be freed after call to the destructor and this 
           new 'child' will be caught and freed correctly.
         */
        DEBUG(10, (DEBUGLEVEL > 10
                   ? "Unlocking key %s\n" : "Unlocking key %.20s\n",
-                  hex_encode(data, (unsigned char *)data->key.dptr,
+                  hex_encode_talloc(data, (unsigned char *)data->key.dptr,
                              data->key.dsize)));
 
        if (tdb_chainunlock(ctx->wtdb->tdb, data->key) != 0) {
@@ -94,7 +96,7 @@ static struct db_record *db_tdb_fetch_locked(struct db_context *db,
 
        /* Do not accidently allocate/deallocate w/o need when debug level is lower than needed */
        if(DEBUGLEVEL >= 10) {
-               char *keystr = hex_encode(NULL, (unsigned char*)key.dptr, key.dsize);
+               char *keystr = hex_encode_talloc(talloc_tos(), (unsigned char*)key.dptr, key.dsize);
                DEBUG(10, (DEBUGLEVEL > 10
                           ? "Locking key %s\n" : "Locking key %.20s\n",
                           keystr));
@@ -176,6 +178,17 @@ static int db_tdb_fetch(struct db_context *db, TALLOC_CTX *mem_ctx,
        return 0;
 }
 
+static int db_tdb_parse(struct db_context *db, TDB_DATA key,
+                       int (*parser)(TDB_DATA key, TDB_DATA data,
+                                     void *private_data),
+                       void *private_data)
+{
+       struct db_tdb_ctx *ctx = talloc_get_type_abort(
+               db->private_data, struct db_tdb_ctx);
+
+       return tdb_parse_record(ctx->wtdb->tdb, key, parser, private_data);
+}
+
 static NTSTATUS db_tdb_store(struct db_record *rec, TDB_DATA data, int flag)
 {
        struct db_tdb_ctx *ctx = talloc_get_type_abort(rec->private_data,
@@ -291,6 +304,14 @@ static int db_tdb_get_seqnum(struct db_context *db)
        return tdb_get_seqnum(db_ctx->wtdb->tdb);
 }
 
+static int db_tdb_get_flags(struct db_context *db)
+
+{
+       struct db_tdb_ctx *db_ctx =
+               talloc_get_type_abort(db->private_data, struct db_tdb_ctx);
+       return tdb_get_flags(db_ctx->wtdb->tdb);
+}
+
 static int db_tdb_transaction_start(struct db_context *db)
 {
        struct db_tdb_ctx *db_ctx =
@@ -320,13 +341,13 @@ struct db_context *db_open_tdb(TALLOC_CTX *mem_ctx,
        struct db_context *result = NULL;
        struct db_tdb_ctx *db_tdb;
 
-       result = TALLOC_ZERO_P(mem_ctx, struct db_context);
+       result = talloc_zero(mem_ctx, struct db_context);
        if (result == NULL) {
                DEBUG(0, ("talloc failed\n"));
                goto fail;
        }
 
-       result->private_data = db_tdb = TALLOC_P(result, struct db_tdb_ctx);
+       result->private_data = db_tdb = talloc(result, struct db_tdb_ctx);
        if (db_tdb == NULL) {
                DEBUG(0, ("talloc failed\n"));
                goto fail;
@@ -343,7 +364,9 @@ struct db_context *db_open_tdb(TALLOC_CTX *mem_ctx,
        result->fetch = db_tdb_fetch;
        result->traverse = db_tdb_traverse;
        result->traverse_read = db_tdb_traverse_read;
+       result->parse_record = db_tdb_parse;
        result->get_seqnum = db_tdb_get_seqnum;
+       result->get_flags = db_tdb_get_flags;
        result->persistent = ((tdb_flags & TDB_CLEAR_IF_FIRST) == 0);
        result->transaction_start = db_tdb_transaction_start;
        result->transaction_commit = db_tdb_transaction_commit;