dbwrap: Make dbwrap_db_id return size_t
authorVolker Lendecke <vl@samba.org>
Sun, 20 Sep 2015 14:26:06 +0000 (16:26 +0200)
committerRalph Böhme <slow@samba.org>
Tue, 22 Sep 2015 02:51:16 +0000 (04:51 +0200)
This will make an on-stack db-id easier

Signed-off-by: Volker Lendecke <vl@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
lib/dbwrap/dbwrap.c
lib/dbwrap/dbwrap.h
lib/dbwrap/dbwrap_cache.c
lib/dbwrap/dbwrap_private.h
lib/dbwrap/dbwrap_rbt.c
lib/dbwrap/dbwrap_tdb.c
source3/lib/dbwrap/dbwrap_ctdb.c
source3/lib/dbwrap/dbwrap_watch.c

index 3cfb21b3c50f434298d3c3c1d0b42513363a5d2c..a1b98c3a4fc8ff5dacbd26185e972ac817619659 100644 (file)
@@ -449,9 +449,9 @@ int dbwrap_transaction_cancel(struct db_context *db)
        return db->transaction_cancel(db);
 }
 
-void dbwrap_db_id(struct db_context *db, const uint8_t **id, size_t *idlen)
+size_t dbwrap_db_id(struct db_context *db, uint8_t *id, size_t idlen)
 {
-       db->id(db, id, idlen);
+       return db->id(db, id, idlen);
 }
 
 bool dbwrap_is_persistent(struct db_context *db)
index 9787078ac5cb4c6dcf9f59b451bea896c84ef597..0a5c9181b34c28bfaed30cbb52c0135eb53bef2e 100644 (file)
@@ -87,7 +87,7 @@ int dbwrap_transaction_start(struct db_context *db);
 NTSTATUS dbwrap_transaction_start_nonblock(struct db_context *db);
 int dbwrap_transaction_commit(struct db_context *db);
 int dbwrap_transaction_cancel(struct db_context *db);
-void dbwrap_db_id(struct db_context *db, const uint8_t **id, size_t *idlen);
+size_t dbwrap_db_id(struct db_context *db, uint8_t *id, size_t idlen);
 bool dbwrap_is_persistent(struct db_context *db);
 const char *dbwrap_name(struct db_context *db);
 
index c317fe005248ce30208c09c3d8d59b97fe6ec794..e4cee558484581f23f671d8ca7c2cd8338aa4bac 100644 (file)
@@ -179,12 +179,13 @@ static int dbwrap_cache_exists(struct db_context *db, TDB_DATA key)
        return dbwrap_exists(ctx->backing, key);
 }
 
-static void dbwrap_cache_id(struct db_context *db, const uint8_t **id,
-                           size_t *idlen)
+static size_t dbwrap_cache_id(struct db_context *db, uint8_t *id,
+                             size_t idlen)
 {
        struct db_cache_ctx *ctx = talloc_get_type_abort(
                db->private_data, struct db_cache_ctx);
-       dbwrap_db_id(ctx->backing, id, idlen);
+
+       return dbwrap_db_id(ctx->backing, id, idlen);
 }
 
 struct db_context *db_open_cache(TALLOC_CTX *mem_ctx,
index f3c42b9d374eec041154e628a473baaac7254d09..6a5285073219ed6040466b5745b33db7556c2e23 100644 (file)
@@ -58,7 +58,8 @@ struct db_context {
        int (*exists)(struct db_context *db,TDB_DATA key);
        int (*wipe)(struct db_context *db);
        int (*check)(struct db_context *db);
-       void (*id)(struct db_context *db, const uint8_t **id, size_t *idlen);
+       size_t (*id)(struct db_context *db, uint8_t *id, size_t idlen);
+
        const char *name;
        void *private_data;
        enum dbwrap_lock_order lock_order;
index 03f2f5762560750f96327e5e89a9e0be20bad1e3..0764a2c723dea407b1b07ff6283d8a04912ce78f 100644 (file)
@@ -497,10 +497,12 @@ static int db_rbt_trans_dummy(struct db_context *db)
        return 0;
 }
 
-static void db_rbt_id(struct db_context *db, const uint8_t **id, size_t *idlen)
+static size_t db_rbt_id(struct db_context *db, uint8_t *id, size_t idlen)
 {
-       *id = (uint8_t *)db;
-       *idlen = sizeof(struct db_context *);
+       if (idlen >= sizeof(struct db_context *)) {
+               memcpy(id, &db, sizeof(struct db_context *));
+       }
+       return sizeof(struct db_context *);
 }
 
 struct db_context *db_open_rbt(TALLOC_CTX *mem_ctx)
index a144ed47bb6d05651c24aebe1a1fa46047d94f6a..0e5444918fa02a8b70a4ca05e390de694f77a907 100644 (file)
@@ -388,12 +388,16 @@ static int db_tdb_transaction_cancel(struct db_context *db)
        return 0;
 }
 
-static void db_tdb_id(struct db_context *db, const uint8_t **id, size_t *idlen)
+static size_t db_tdb_id(struct db_context *db, uint8_t *id, size_t idlen)
 {
        struct db_tdb_ctx *db_ctx =
                talloc_get_type_abort(db->private_data, struct db_tdb_ctx);
-       *id = (uint8_t *)&db_ctx->id;
-       *idlen = sizeof(db_ctx->id);
+
+       if (idlen >= sizeof(db_ctx->id)) {
+               memcpy(id, &db_ctx->id, sizeof(db_ctx->id));
+       }
+
+       return sizeof(db_ctx->id);
 }
 
 struct db_context *db_open_tdb(TALLOC_CTX *mem_ctx,
index f37bfd82596695fecccb36269d36ccd0df1dcb2f..3b68338841e9a1de4dc7c600cec53613e102b69b 100644 (file)
@@ -1517,14 +1517,16 @@ static int db_ctdb_get_seqnum(struct db_context *db)
        return tdb_get_seqnum(ctx->wtdb->tdb);
 }
 
-static void db_ctdb_id(struct db_context *db, const uint8_t **id,
-                      size_t *idlen)
+static size_t db_ctdb_id(struct db_context *db, uint8_t *id, size_t idlen)
 {
        struct db_ctdb_ctx *ctx = talloc_get_type_abort(
                db->private_data, struct db_ctdb_ctx);
 
-       *id = (uint8_t *)&ctx->db_id;
-       *idlen = sizeof(ctx->db_id);
+       if (idlen >= sizeof(ctx->db_id)) {
+               memcpy(id, &ctx->db_id, sizeof(ctx->db_id));
+       }
+
+       return sizeof(ctx->db_id);
 }
 
 struct db_context *db_open_ctdb(TALLOC_CTX *mem_ctx,
index da1a9cc11e91e762952185e2657c783b308fe3aa..11ade1948af639b6573f5a353de6db02f7bb33d4 100644 (file)
@@ -50,11 +50,12 @@ static TDB_DATA dbwrap_record_watchers_key(TALLOC_CTX *mem_ctx,
                                           struct db_record *rec,
                                           TDB_DATA *rec_key)
 {
-       const uint8_t *db_id;
-       size_t db_id_len;
+       size_t db_id_len = dbwrap_db_id(db, NULL, 0);
+       uint8_t db_id[db_id_len];
        TDB_DATA key, wkey;
 
-       dbwrap_db_id(db, &db_id, &db_id_len);
+       dbwrap_db_id(db, db_id, db_id_len);
+
        key = dbwrap_record_get_key(rec);
 
        wkey.dsize = sizeof(uint32_t) + db_id_len + key.dsize;