diff options
author | Volker Lendecke <vl@samba.org> | 2009-02-22 00:18:05 +0100 |
---|---|---|
committer | Michael Adam <obnox@samba.org> | 2009-02-26 11:05:22 +0100 |
commit | 9475e88beadd19c245ca4010c398652a85ccfd78 (patch) | |
tree | 98be306944a0713c0abc7c0f6becefbe38ed317a | |
parent | 16f61a6f90060d40f0348cb433e3b900ae05fcba (diff) | |
download | samba-9475e88beadd19c245ca4010c398652a85ccfd78.tar.gz samba-9475e88beadd19c245ca4010c398652a85ccfd78.tar.bz2 samba-9475e88beadd19c245ca4010c398652a85ccfd78.zip |
Add dbwrap->parse_record
Signed-off-by: Michael Adam <obnox@samba.org>
-rw-r--r-- | source3/include/dbwrap.h | 4 | ||||
-rw-r--r-- | source3/lib/dbwrap.c | 26 |
2 files changed, 30 insertions, 0 deletions
diff --git a/source3/include/dbwrap.h b/source3/include/dbwrap.h index aad4ccd721..16f10cc125 100644 --- a/source3/include/dbwrap.h +++ b/source3/include/dbwrap.h @@ -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; }; diff --git a/source3/lib/dbwrap.c b/source3/lib/dbwrap.c index a57b7c97a5..5e7ce6099f 100644 --- a/source3/lib/dbwrap.c +++ b/source3/lib/dbwrap.c @@ -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; } |