X-Git-Url: https://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Ftdb%2Fsummary.c;h=277ab4cb95c336a4767a9034920aebde92d66faa;hp=a8f2b71bf1ff1ae4f741cc6179dd018e1afb178a;hb=72d5504f02dbcb20b3df262834ee422be3405412;hpb=42ecd1617a802642710fe4129cd57f40bf81490c diff --git a/ccan/tdb/summary.c b/ccan/tdb/summary.c index a8f2b71b..277ab4cb 100644 --- a/ccan/tdb/summary.c +++ b/ccan/tdb/summary.c @@ -19,7 +19,7 @@ #include #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" \ @@ -37,21 +37,6 @@ #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; @@ -117,6 +102,9 @@ char *tdb_summary(struct tdb_context *tdb, enum tdb_summary_flags flags) 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); @@ -126,7 +114,7 @@ char *tdb_summary(struct tdb_context *tdb, enum tdb_summary_flags flags) 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); @@ -137,15 +125,9 @@ char *tdb_summary(struct tdb_context *tdb, enum tdb_summary_flags flags) 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));