- if (tdb_read_convert(tdb, zone_off, &zhdr, sizeof(zhdr)) == -1)
- return TDB_OFF_ERR;
-
- if (zhdr.zone_bits < INITIAL_ZONE_BITS) {
- tdb->log(tdb, TDB_DEBUG_ERROR, tdb->log_priv,
- "check: bad zone_bits %llu at zone %llu\n",
- (long long)zhdr.zone_bits, (long long)zone_off);
- return TDB_OFF_ERR;
- }
-
- /* Zone bits can only increase... */
- if (zhdr.zone_bits > *max_zone_bits)
- *max_zone_bits = zhdr.zone_bits;
- else if (zhdr.zone_bits < *max_zone_bits) {
- tdb->log(tdb, TDB_DEBUG_ERROR, tdb->log_priv,
- "check: small zone_bits %llu at zone %llu\n",
- (long long)zhdr.zone_bits, (long long)zone_off);
- return TDB_OFF_ERR;
- }
-
- /* Zone header must be within file! */
- hdrlen = sizeof(zhdr)
- + (BUCKETS_FOR_ZONE(zhdr.zone_bits) + 1) * sizeof(tdb_off_t);
-
- if (tdb->methods->oob(tdb, zone_off + hdrlen, true))
- return TDB_OFF_ERR;
-
- end = zone_off + (1ULL << zhdr.zone_bits);
- if (end > tdb->map_size)
- end = tdb->map_size;
-
- for (off = zone_off + hdrlen; off < end; off += len) {