X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Ftdb2%2Ftdb.c;h=dfa68451e51a878d4be75f5431121ff1f012b9d4;hb=5adceea6af51c93d3b6fc39849ff05340cd87253;hp=a4dbc53d6f237050fc8e9ae5310138a3e8e87913;hpb=4e185ad8ab5a7e01edbbe12d11eb2f1577de7e8b;p=ccan diff --git a/ccan/tdb2/tdb.c b/ccan/tdb2/tdb.c index a4dbc53d..dfa68451 100644 --- a/ccan/tdb2/tdb.c +++ b/ccan/tdb2/tdb.c @@ -72,7 +72,7 @@ static uint64_t random_number(struct tdb_context *tdb) struct new_database { struct tdb_header hdr; - struct tdb_freelist flist; + struct tdb_freetable ftable; }; /* initialise a new database */ @@ -101,11 +101,11 @@ static int tdb_new_database(struct tdb_context *tdb, memset(newdb.hdr.hashtable, 0, sizeof(newdb.hdr.hashtable)); /* Free is empty. */ - newdb.hdr.free_list = offsetof(struct new_database, flist); - memset(&newdb.flist, 0, sizeof(newdb.flist)); - set_used_header(NULL, &newdb.flist.hdr, 0, - sizeof(newdb.flist) - sizeof(newdb.flist.hdr), - sizeof(newdb.flist) - sizeof(newdb.flist.hdr), 1); + newdb.hdr.free_table = offsetof(struct new_database, ftable); + memset(&newdb.ftable, 0, sizeof(newdb.ftable)); + set_header(NULL, &newdb.ftable.hdr, TDB_FTABLE_MAGIC, 0, + sizeof(newdb.ftable) - sizeof(newdb.ftable.hdr), + sizeof(newdb.ftable) - sizeof(newdb.ftable.hdr), 0); /* Magic food */ memset(newdb.hdr.magic_food, 0, sizeof(newdb.hdr.magic_food)); @@ -172,6 +172,7 @@ struct tdb_context *tdb_open(const char *name, int tdb_flags, tdb->logfn = NULL; tdb->transaction = NULL; tdb->stats = NULL; + tdb->access = NULL; tdb_hash_init(tdb); tdb_io_init(tdb); tdb_lock_init(tdb); @@ -228,7 +229,7 @@ struct tdb_context *tdb_open(const char *name, int tdb_flags, } tdb_convert(tdb, &hdr.hash_seed, sizeof(hdr.hash_seed)); tdb->hash_seed = hdr.hash_seed; - tdb_flist_init(tdb); + tdb_ftable_init(tdb); return tdb; } @@ -323,7 +324,7 @@ struct tdb_context *tdb_open(const char *name, int tdb_flags, goto fail; } - if (tdb_flist_init(tdb) == -1) + if (tdb_ftable_init(tdb) == -1) goto fail; tdb->next = tdbs; @@ -376,7 +377,6 @@ struct tdb_context *tdb_open(const char *name, int tdb_flags, return NULL; } -/* FIXME: modify, don't rewrite! */ static int update_rec_hdr(struct tdb_context *tdb, tdb_off_t off, tdb_len_t keylen, @@ -386,7 +386,8 @@ static int update_rec_hdr(struct tdb_context *tdb, { uint64_t dataroom = rec_data_length(rec) + rec_extra_padding(rec); - if (set_used_header(tdb, rec, keylen, datalen, keylen + dataroom, h)) + if (set_header(tdb, rec, TDB_USED_MAGIC, keylen, datalen, + keylen + dataroom, h)) return -1; return tdb_write_convert(tdb, off, rec, sizeof(*rec)); @@ -402,7 +403,8 @@ static int replace_data(struct tdb_context *tdb, tdb_off_t new_off; /* Allocate a new record. */ - new_off = alloc(tdb, key.dsize, dbuf.dsize, h->h, growing); + new_off = alloc(tdb, key.dsize, dbuf.dsize, h->h, TDB_USED_MAGIC, + growing); if (unlikely(new_off == TDB_OFF_ERR)) return -1; @@ -468,7 +470,6 @@ int tdb_store(struct tdb_context *tdb, h.hlock_range, F_WRLCK); return 0; } - /* FIXME: See if right record is free? */ } else { if (flag == TDB_MODIFY) { /* if the record doesn't exist and we @@ -525,7 +526,6 @@ int tdb_append(struct tdb_context *tdb, F_WRLCK); return 0; } - /* FIXME: Check right record free? */ /* Slow path. */ newdata = malloc(key.dsize + old_dlen + dbuf.dsize);