X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Ftdb2%2Ftest%2Frun-04-basichash.c;h=815011faeb2c68e870efd1e0600da7ffdaa0c373;hb=b87e14495d5b07e1b247218a72329f10ecb3da7f;hp=db895b6c6fca3c850bb927e13f9d0cc7d2b45935;hpb=bee60dd0ffe0b1b5821061b4384000c4246f2051;p=ccan diff --git a/ccan/tdb2/test/run-04-basichash.c b/ccan/tdb2/test/run-04-basichash.c index db895b6c..815011fa 100644 --- a/ccan/tdb2/test/run-04-basichash.c +++ b/ccan/tdb2/test/run-04-basichash.c @@ -1,8 +1,10 @@ #include +#include #include #include #include #include +#include #include #include #include "logging.h" @@ -10,7 +12,7 @@ /* We rig the hash so adjacent-numbered records always clash. */ static uint64_t clash(const void *key, size_t len, uint64_t seed, void *priv) { - return ((uint64_t)*(unsigned int *)key) + return ((uint64_t)*(const unsigned int *)key) << (64 - TDB_TOPLEVEL_HASH_BITS - 1); } @@ -23,7 +25,7 @@ int main(int argc, char *argv[]) struct tdb_data key = { (unsigned char *)&v, sizeof(v) }; struct tdb_data dbuf = { (unsigned char *)&v, sizeof(v) }; union tdb_attribute hattr = { .hash = { .base = { TDB_ATTRIBUTE_HASH }, - .hash_fn = clash } }; + .fn = clash } }; int flags[] = { TDB_INTERNAL, TDB_DEFAULT, TDB_NOMMAP, TDB_INTERNAL|TDB_CONVERT, TDB_CONVERT, TDB_NOMMAP|TDB_CONVERT, @@ -58,23 +60,24 @@ int main(int argc, char *argv[]) ok1(h.hlock_start == 0); ok1(h.hlock_range == 1ULL << (64-(TDB_TOPLEVEL_HASH_BITS-TDB_HASH_GROUP_BITS))); - ok1((tdb->flags & TDB_NOLOCK) || tdb->num_lockrecs == 1); + ok1((tdb->flags & TDB_NOLOCK) || tdb->file->num_lockrecs == 1); ok1((tdb->flags & TDB_NOLOCK) - || tdb->lockrecs[0].off == TDB_HASH_LOCK_START); + || tdb->file->lockrecs[0].off == TDB_HASH_LOCK_START); /* FIXME: Check lock length */ /* Allocate a new record. */ - new_off = alloc(tdb, key.dsize, dbuf.dsize, h.h, false); - ok1(new_off != TDB_OFF_ERR); + new_off = alloc(tdb, key.dsize, dbuf.dsize, h.h, + TDB_USED_MAGIC, false); + ok1(!TDB_OFF_IS_ERR(new_off)); /* We should be able to add it now. */ ok1(add_to_hash(tdb, &h, new_off) == 0); /* Make sure we fill it in for later finding. */ off = new_off + sizeof(struct tdb_used_record); - ok1(!tdb->methods->write(tdb, off, key.dptr, key.dsize)); + ok1(!tdb->methods->twrite(tdb, off, key.dptr, key.dsize)); off += key.dsize; - ok1(!tdb->methods->write(tdb, off, dbuf.dptr, dbuf.dsize)); + ok1(!tdb->methods->twrite(tdb, off, dbuf.dptr, dbuf.dsize)); /* We should be able to unlock that OK. */ ok1(tdb_unlock_hashes(tdb, h.hlock_start, h.hlock_range, @@ -98,9 +101,9 @@ int main(int argc, char *argv[]) ok1(h.hlock_start == 0); ok1(h.hlock_range == 1ULL << (64-(TDB_TOPLEVEL_HASH_BITS-TDB_HASH_GROUP_BITS))); - ok1((tdb->flags & TDB_NOLOCK) || tdb->num_lockrecs == 1); + ok1((tdb->flags & TDB_NOLOCK) || tdb->file->num_lockrecs == 1); ok1((tdb->flags & TDB_NOLOCK) - || tdb->lockrecs[0].off == TDB_HASH_LOCK_START); + || tdb->file->lockrecs[0].off == TDB_HASH_LOCK_START); /* FIXME: Check lock length */ ok1(tdb_unlock_hashes(tdb, h.hlock_start, h.hlock_range, @@ -124,9 +127,9 @@ int main(int argc, char *argv[]) ok1(h.hlock_start == 0); ok1(h.hlock_range == 1ULL << (64-(TDB_TOPLEVEL_HASH_BITS-TDB_HASH_GROUP_BITS))); - ok1((tdb->flags & TDB_NOLOCK) || tdb->num_lockrecs == 1); + ok1((tdb->flags & TDB_NOLOCK) || tdb->file->num_lockrecs == 1); ok1((tdb->flags & TDB_NOLOCK) - || tdb->lockrecs[0].off == TDB_HASH_LOCK_START); + || tdb->file->lockrecs[0].off == TDB_HASH_LOCK_START); /* FIXME: Check lock length */ /* Make it expand 0'th bucket. */ @@ -162,18 +165,19 @@ int main(int argc, char *argv[]) ok1(h.hlock_start == 0); ok1(h.hlock_range == 1ULL << (64-(TDB_TOPLEVEL_HASH_BITS-TDB_HASH_GROUP_BITS))); - ok1((tdb->flags & TDB_NOLOCK) || tdb->num_lockrecs == 1); + ok1((tdb->flags & TDB_NOLOCK) || tdb->file->num_lockrecs == 1); ok1((tdb->flags & TDB_NOLOCK) - || tdb->lockrecs[0].off == TDB_HASH_LOCK_START); + || tdb->file->lockrecs[0].off == TDB_HASH_LOCK_START); /* FIXME: Check lock length */ /* Simple delete should work. */ ok1(delete_from_hash(tdb, &h) == 0); - ok1(add_free_record(tdb, rec_zone_bits(&rec), new_off, + ok1(add_free_record(tdb, new_off, sizeof(struct tdb_used_record) + rec_key_length(&rec) + rec_data_length(&rec) - + rec_extra_padding(&rec)) == 0); + + rec_extra_padding(&rec), + TDB_LOCK_NOWAIT, false) == 0); ok1(tdb_unlock_hashes(tdb, h.hlock_start, h.hlock_range, F_WRLCK) == 0); ok1(tdb_check(tdb, NULL, NULL) == 0); @@ -193,9 +197,9 @@ int main(int argc, char *argv[]) ok1(h.hlock_start == 0); ok1(h.hlock_range == 1ULL << (64-(TDB_TOPLEVEL_HASH_BITS-TDB_HASH_GROUP_BITS))); - ok1((tdb->flags & TDB_NOLOCK) || tdb->num_lockrecs == 1); + ok1((tdb->flags & TDB_NOLOCK) || tdb->file->num_lockrecs == 1); ok1((tdb->flags & TDB_NOLOCK) - || tdb->lockrecs[0].off == TDB_HASH_LOCK_START); + || tdb->file->lockrecs[0].off == TDB_HASH_LOCK_START); /* FIXME: Check lock length */ ok1(expand_group(tdb, &h) == 0); @@ -224,15 +228,16 @@ int main(int argc, char *argv[]) /* We should be able to add it now. */ /* Allocate a new record. */ - new_off = alloc(tdb, key.dsize, dbuf.dsize, h.h, false); - ok1(new_off != TDB_OFF_ERR); + new_off = alloc(tdb, key.dsize, dbuf.dsize, h.h, + TDB_USED_MAGIC, false); + ok1(!TDB_OFF_IS_ERR(new_off)); ok1(add_to_hash(tdb, &h, new_off) == 0); /* Make sure we fill it in for later finding. */ off = new_off + sizeof(struct tdb_used_record); - ok1(!tdb->methods->write(tdb, off, key.dptr, key.dsize)); + ok1(!tdb->methods->twrite(tdb, off, key.dptr, key.dsize)); off += key.dsize; - ok1(!tdb->methods->write(tdb, off, dbuf.dptr, dbuf.dsize)); + ok1(!tdb->methods->twrite(tdb, off, dbuf.dptr, dbuf.dsize)); /* We should be able to unlock that OK. */ ok1(tdb_unlock_hashes(tdb, h.hlock_start, h.hlock_range,