1
0
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:
Volker Lendecke 2009-02-22 00:18:05 +01:00 committed by Michael Adam
parent 16f61a6f90
commit 9475e88bea
2 changed files with 30 additions and 0 deletions

View File

@ -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;
};

View File

@ -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;
}