X-Git-Url: https://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Ftdb2%2Ftdb1_check.c;h=4d71712c473fb465021ca0cd778dc3b9bbdad418;hp=c3c3c60f431cf494d78fcd5c28174b10345e9dc2;hb=ef92843f2c74ab9d4fa7f167a2182e5e8955df91;hpb=ceb2f3eacbad917ee990afbc3dd800bfb0607887 diff --git a/ccan/tdb2/tdb1_check.c b/ccan/tdb2/tdb1_check.c index c3c3c60f..4d71712c 100644 --- a/ccan/tdb2/tdb1_check.c +++ b/ccan/tdb2/tdb1_check.c @@ -236,7 +236,8 @@ static bool tdb1_check_used_record(struct tdb_context *tdb, tdb1_off_t off, const struct tdb1_record *rec, unsigned char **hashes, - int (*check)(TDB_DATA, TDB_DATA, void *), + enum TDB_ERROR (*check)(TDB_DATA, TDB_DATA, + void *), void *private_data) { TDB_DATA key, data; @@ -270,13 +271,18 @@ static bool tdb1_check_used_record(struct tdb_context *tdb, /* If they supply a check function and this record isn't dead, get data and feed it. */ if (check && rec->magic != TDB1_DEAD_MAGIC) { + enum TDB_ERROR ecode; + data = get_bytes(tdb, off + sizeof(*rec) + rec->key_len, rec->data_len); if (!data.dptr) goto fail_put_key; - if (check(key, data, private_data) == -1) + ecode = check(key, data, private_data); + if (ecode != TDB_SUCCESS) { + tdb->last_error = ecode; goto fail_put_data; + } put_bytes(tdb, data); } @@ -323,8 +329,8 @@ size_t tdb1_dead_space(struct tdb_context *tdb, tdb1_off_t off) } int tdb1_check(struct tdb_context *tdb, - int (*check)(TDB_DATA key, TDB_DATA data, void *private_data), - void *private_data) + enum TDB_ERROR (*check)(TDB_DATA key, TDB_DATA data, void *), + void *private_data) { unsigned int h; unsigned char **hashes;