ldb: Change remaining fetch prototypes to remove TDB_DATA
authorGarming Sam <garming@catalyst.net.nz>
Sun, 18 Feb 2018 23:37:20 +0000 (12:37 +1300)
committerAndrew Bartlett <abartlet@samba.org>
Fri, 6 Apr 2018 00:08:44 +0000 (02:08 +0200)
Signed-off-by: Garming Sam <garming@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Gary Lockyer <gary@catalyst.net.nz>
lib/ldb/ldb_tdb/ldb_search.c
lib/ldb/ldb_tdb/ldb_tdb.c
lib/ldb/ldb_tdb/ldb_tdb.h

index 78ef8b0abb1128be99462560607e69159dabbee2..35583a1eaa37cd9785d6f8da7ea818a7840a08ae 100644 (file)
@@ -180,17 +180,15 @@ struct ltdb_parse_data_unpack_ctx {
        unsigned int unpack_flags;
 };
 
-static int ltdb_parse_data_unpack(TDB_DATA key, TDB_DATA data,
+static int ltdb_parse_data_unpack(struct ldb_val key,
+                                 struct ldb_val data,
                                  void *private_data)
 {
        struct ltdb_parse_data_unpack_ctx *ctx = private_data;
        unsigned int nb_elements_in_db;
        int ret;
        struct ldb_context *ldb = ldb_module_get_ctx(ctx->module);
-       struct ldb_val data_parse = {
-               .data = data.dptr,
-               .length = data.dsize
-       };
+       struct ldb_val data_parse = data;
 
        if (ctx->unpack_flags & LDB_UNPACK_DATA_FLAG_NO_DATA_ALLOC) {
                /*
@@ -200,13 +198,13 @@ static int ltdb_parse_data_unpack(TDB_DATA key, TDB_DATA data,
                 * and the caller needs a stable result.
                 */
                data_parse.data = talloc_memdup(ctx->msg,
-                                               data.dptr,
-                                               data.dsize);
+                                               data.data,
+                                               data.length);
                if (data_parse.data == NULL) {
                        ldb_debug(ldb, LDB_DEBUG_ERROR,
                                  "Unable to allocate data(%d) for %*.*s\n",
-                                 (int)data.dsize,
-                                 (int)key.dsize, (int)key.dsize, key.dptr);
+                                 (int)data.length,
+                                 (int)key.length, (int)key.length, key.data);
                        return LDB_ERR_OPERATIONS_ERROR;
                }
        }
@@ -217,13 +215,13 @@ static int ltdb_parse_data_unpack(TDB_DATA key, TDB_DATA data,
                                                   ctx->unpack_flags,
                                                   &nb_elements_in_db);
        if (ret == -1) {
-               if (data_parse.data != data.dptr) {
+               if (data_parse.data != data.data) {
                        talloc_free(data_parse.data);
                }
 
                ldb_debug(ldb, LDB_DEBUG_ERROR, "Invalid data for index %*.*s\n",
-                         (int)key.dsize, (int)key.dsize, key.dptr);
-               return LDB_ERR_OPERATIONS_ERROR;                
+                         (int)key.length, (int)key.length, key.data);
+               return LDB_ERR_OPERATIONS_ERROR;
        }
        return ret;
 }
@@ -246,13 +244,17 @@ int ltdb_search_key(struct ldb_module *module, struct ltdb_private *ltdb,
                .module = module,
                .unpack_flags = unpack_flags
        };
+       struct ldb_val ldb_key = {
+               .data = tdb_key.dptr,
+               .length = tdb_key.dsize
+       };
 
        memset(msg, 0, sizeof(*msg));
 
        msg->num_elements = 0;
        msg->elements = NULL;
 
-       ret = ltdb->kv_ops->fetch_and_parse(ltdb, tdb_key,
+       ret = ltdb->kv_ops->fetch_and_parse(ltdb, ldb_key,
                                            ltdb_parse_data_unpack, &ctx);
 
        if (ret == -1) {
index f94a308cbf96b7fbbffc3b4d5a68bbee7f0b1326..423b5a1f68766f26f13b9a221e642f6a8aeede11 100644 (file)
@@ -1765,6 +1765,9 @@ struct kv_ctx {
        ldb_kv_traverse_fn kv_traverse_fn;
        void *ctx;
        struct ltdb_private *ltdb;
+       int (*parser)(struct ldb_val key,
+                     struct ldb_val data,
+                     void *private_data);
 };
 
 static int ldb_tdb_traverse_fn_wrapper(struct tdb_context *tdb, TDB_DATA tdb_key, TDB_DATA tdb_data, void *ctx)
@@ -1847,12 +1850,41 @@ static int ltdb_tdb_update_in_iterate(struct ltdb_private *ltdb,
        return tdb_ret;
 }
 
-static int ltdb_tdb_parse_record(struct ltdb_private *ltdb, TDB_DATA key,
-                                int (*parser)(TDB_DATA key, TDB_DATA data,
+static int ltdb_tdb_parse_record_wrapper(TDB_DATA tdb_key, TDB_DATA tdb_data,
+                                        void *ctx)
+{
+       struct kv_ctx *kv_ctx = ctx;
+       struct ldb_val key = {
+               .length = tdb_key.dsize,
+               .data = tdb_key.dptr,
+       };
+       struct ldb_val data = {
+               .length = tdb_data.dsize,
+               .data = tdb_data.dptr,
+       };
+
+       return kv_ctx->parser(key, data, kv_ctx->ctx);
+}
+
+static int ltdb_tdb_parse_record(struct ltdb_private *ltdb,
+                                struct ldb_val ldb_key,
+                                int (*parser)(struct ldb_val key,
+                                              struct ldb_val data,
                                               void *private_data),
                                 void *ctx)
 {
-       return tdb_parse_record(ltdb->tdb, key, parser, ctx);
+       struct kv_ctx kv_ctx = {
+               .parser = parser,
+               .ctx = ctx,
+               .ltdb = ltdb
+       };
+       TDB_DATA key = {
+               .dptr = ldb_key.data,
+               .dsize = ldb_key.length
+       };
+
+       return tdb_parse_record(ltdb->tdb, key, ltdb_tdb_parse_record_wrapper,
+                               &kv_ctx);
 }
 
 static const char * ltdb_tdb_name(struct ltdb_private *ltdb)
index 2c0ea7cfe3842ee9310b40f3eb123272e7e5cd88..f14666ba88a4e62ff8e2f68ddb0924b9a787eae8 100644 (file)
@@ -15,8 +15,8 @@ struct kv_db_ops {
        int (*iterate)(struct ltdb_private *ltdb, ldb_kv_traverse_fn fn, void *ctx);
        int (*update_in_iterate)(struct ltdb_private *ltdb, struct ldb_val key,
                                 struct ldb_val key2, struct ldb_val data, void *ctx);
-       int (*fetch_and_parse)(struct ltdb_private *ltdb, TDB_DATA key,
-                               int (*parser)(TDB_DATA key, TDB_DATA data,
+       int (*fetch_and_parse)(struct ltdb_private *ltdb, struct ldb_val key,
+                               int (*parser)(struct ldb_val key, struct ldb_val data,
                                              void *private_data),
                                void *ctx);
        int (*lock_read)(struct ldb_module *);