- newdb.hdr.v.hash_bits = INITIAL_HASH_BITS;
- newdb.hdr.v.hash_off = offsetof(struct new_database, hash);
- set_header(tdb, &newdb.hrec, 0,
- sizeof(newdb.hash), sizeof(newdb.hash), 0);
- memset(newdb.hash, 0, sizeof(newdb.hash));
+ newdb.h.hdr.v.hash_bits = INITIAL_HASH_BITS;
+ newdb.h.hdr.v.hash_off = offsetof(struct new_database, h.hash);
+ set_header(tdb, &newdb.h.hrec, 0,
+ sizeof(newdb.h.hash), sizeof(newdb.h.hash), 0,
+ INITIAL_ZONE_BITS);
+ memset(newdb.h.hash, 0, sizeof(newdb.h.hash));
+
+ /* Create the single free entry. */
+ newdb.h.frec.magic_and_meta = TDB_FREE_MAGIC | INITIAL_ZONE_BITS;
+ newdb.h.frec.data_len = (sizeof(newdb.h.frec)
+ - sizeof(struct tdb_used_record)
+ + sizeof(newdb.space));
+
+ /* Free is mostly empty... */
+ newdb.h.zhdr.zone_bits = INITIAL_ZONE_BITS;
+ memset(newdb.h.free, 0, sizeof(newdb.h.free));
+
+ /* ... except for this one bucket. */
+ bucket = size_to_bucket(INITIAL_ZONE_BITS, newdb.h.frec.data_len);
+ newdb.h.free[bucket] = offsetof(struct new_database, h.frec);
+ newdb.h.frec.next = newdb.h.frec.prev = 0;
+
+ /* Tailer contains maximum number of free_zone bits. */
+ newdb.tailer = INITIAL_ZONE_BITS;