mirror of
https://github.com/samba-team/samba.git
synced 2025-01-11 05:18:09 +03:00
Add dbwrap->parse_record
Signed-off-by: Michael Adam <obnox@samba.org>
This commit is contained in:
parent
16f61a6f90
commit
9475e88bea
@ -46,6 +46,10 @@ struct db_context {
|
||||
int (*transaction_start)(struct db_context *db);
|
||||
int (*transaction_commit)(struct db_context *db);
|
||||
int (*transaction_cancel)(struct db_context *db);
|
||||
int (*parse_record)(struct db_context *db, TDB_DATA key,
|
||||
int (*parser)(TDB_DATA key, TDB_DATA data,
|
||||
void *private_data),
|
||||
void *private_data);
|
||||
void *private_data;
|
||||
bool persistent;
|
||||
};
|
||||
|
@ -42,6 +42,29 @@ static int dbwrap_fallback_fetch(struct db_context *db, TALLOC_CTX *mem_ctx,
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Fall back using fetch if no genuine parse operation is provided
|
||||
*/
|
||||
|
||||
static int dbwrap_fallback_parse_record(struct db_context *db, TDB_DATA key,
|
||||
int (*parser)(TDB_DATA key,
|
||||
TDB_DATA data,
|
||||
void *private_data),
|
||||
void *private_data)
|
||||
{
|
||||
TDB_DATA data;
|
||||
int res;
|
||||
|
||||
res = db->fetch(db, talloc_tos(), key, &data);
|
||||
if (res != 0) {
|
||||
return res;
|
||||
}
|
||||
|
||||
res = parser(key, data, private_data);
|
||||
TALLOC_FREE(data.dptr);
|
||||
return res;
|
||||
}
|
||||
|
||||
/**
|
||||
* open a database
|
||||
*/
|
||||
@ -101,6 +124,9 @@ struct db_context *db_open(TALLOC_CTX *mem_ctx,
|
||||
if ((result != NULL) && (result->fetch == NULL)) {
|
||||
result->fetch = dbwrap_fallback_fetch;
|
||||
}
|
||||
if ((result != NULL) && (result->parse_record == NULL)) {
|
||||
result->parse_record = dbwrap_fallback_parse_record;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user