- /* Updates tdb->map_size. */
- if (tdb->methods->expand_file(tdb, add) == -1)
- return TDB_OFF_ERR;
- if (add_free_record(tdb, tdb->map_size - add, add) == -1)
- return TDB_OFF_ERR;
- return add;
-}
-
-static int update_zones(struct tdb_context *tdb,
- uint64_t new_num_zones,
- uint64_t new_zone_bits,
- uint64_t new_num_buckets,
- tdb_len_t add)
-{
- tdb_len_t freebucket_size;
- const tdb_off_t *oldf;
- tdb_off_t i, off, old_num_total, old_free_off;
- struct tdb_used_record fhdr;
-
- /* Updates tdb->map_size. */
- if (tdb->methods->expand_file(tdb, add) == -1)
- return -1;
-
- /* Use first part as new free bucket array. */
- off = tdb->map_size - add;
- freebucket_size = new_num_zones
- * (new_num_buckets + 1) * sizeof(tdb_off_t);
-
- /* Write header. */
- if (set_header(tdb, &fhdr, 0, freebucket_size, freebucket_size, 0))
- return -1;
- if (tdb_write_convert(tdb, off, &fhdr, sizeof(fhdr)) == -1)
- return -1;
-
- /* Adjust off to point to start of buckets, add to be remainder. */
- add -= freebucket_size + sizeof(fhdr);
- off += sizeof(fhdr);
-
- /* Access the old zones. */
- old_num_total = tdb->header.v.num_zones*(tdb->header.v.free_buckets+1);
- old_free_off = tdb->header.v.free_off;
- oldf = tdb_access_read(tdb, old_free_off,
- old_num_total * sizeof(tdb_off_t), true);
- if (!oldf)