msg->num_elements = 0;
msg->elements = NULL;
- ret = tdb_parse_record(ltdb->tdb, tdb_key,
- ltdb_parse_data_unpack, &ctx);
-
+ ret = ltdb->kv_ops->fetch_and_parse(ltdb, tdb_key,
+ ltdb_parse_data_unpack, &ctx);
+
if (ret == -1) {
ret = ltdb->kv_ops->error(ltdb);
if (ret == LDB_SUCCESS) {
ltdb_request_extended_done(ctx, ext, ret);
}
+static int ltdb_tdb_parse_record(struct ltdb_private *ltdb, TDB_DATA key,
+ int (*parser)(TDB_DATA key, TDB_DATA data,
+ void *private_data),
+ void *ctx)
+{
+ return tdb_parse_record(ltdb->tdb, key, parser, ctx);
+}
+
static const char * ltdb_tdb_name(struct ltdb_private *ltdb)
{
return tdb_name(ltdb->tdb);
static const struct kv_db_ops key_value_ops = {
.store = ltdb_tdb_store,
.delete = ltdb_tdb_delete,
+ .fetch_and_parse = ltdb_tdb_parse_record,
.lock_read = ltdb_lock_read,
.unlock_read = ltdb_unlock_read,
.begin_write = ltdb_tdb_transaction_start,
struct kv_db_ops {
int (*store)(struct ltdb_private *ltdb, TDB_DATA key, TDB_DATA data, int flags);
int (*delete)(struct ltdb_private *ltdb, TDB_DATA key);
+ int (*fetch_and_parse)(struct ltdb_private *ltdb, TDB_DATA key,
+ int (*parser)(TDB_DATA key, TDB_DATA data,
+ void *private_data),
+ void *ctx);
int (*lock_read)(struct ldb_module *);
int (*unlock_read)(struct ldb_module *);
int (*begin_write)(struct ltdb_private *);