#include <ccan/tally/tally.h>
#define SUMMARY_FORMAT \
- "Size of file/data: %zu/%zu\n" \
+ "Size of file/data: %u/%zu\n" \
"Number of records: %zu\n" \
"Smallest/average/largest keys: %zu/%zu/%zu\n%s" \
"Smallest/average/largest data: %zu/%zu/%zu\n%s" \
#define HISTO_WIDTH 70
#define HISTO_HEIGHT 20
-/* Slow, but should be very rare. */
-static size_t dead_space(struct tdb_context *tdb, tdb_off_t off)
-{
- size_t len;
-
- for (len = 0; off + len < tdb->map_size; len++) {
- char c;
- if (tdb->methods->tdb_read(tdb, off, &c, 1, 0))
- return 0;
- if (c != 0 && c != 0x42)
- break;
- }
- return len;
-}
-
static size_t get_hash_length(struct tdb_context *tdb, unsigned int i)
{
tdb_off_t rec_ptr;
tally_add(data, rec.data_len);
tally_add(extra, rec.rec_len - (rec.key_len
+ rec.data_len));
+ if (unc > 1)
+ tally_add(uncoal, unc - 1);
+ unc = 0;
break;
case TDB_FREE_MAGIC:
tally_add(freet, rec.rec_len);
case TDB_RECOVERY_INVALID_MAGIC:
case 0x42424242:
unc++;
- rec.rec_len = dead_space(tdb, off) - sizeof(rec);
+ rec.rec_len = tdb_dead_space(tdb, off) - sizeof(rec);
/* Fall through */
case TDB_DEAD_MAGIC:
tally_add(dead, rec.rec_len);
rec.magic, off));
goto unlock;
}
-
- if (unc &&
- (rec.magic == TDB_MAGIC || rec.magic == TDB_DEAD_MAGIC)) {
- tally_add(uncoal, unc);
- unc = 0;
- }
}
- if (unc)
- tally_add(uncoal, unc);
+ if (unc > 1)
+ tally_add(uncoal, unc - 1);
for (off = 0; off < tdb->header.hash_size; off++)
tally_add(hash, get_hash_length(tdb, off));