Browse Source

tdb: combine dead_space helper from summary.c and check.c

Remove code duplication, and allow unit tests (which #include both).
Rusty Russell 15 years ago
parent
commit
0a97f2dc1d
3 changed files with 4 additions and 18 deletions
  1. 2 2
      ccan/tdb/check.c
  2. 1 16
      ccan/tdb/summary.c
  3. 1 0
      ccan/tdb/tdb_private.h

+ 2 - 2
ccan/tdb/check.c

@@ -309,7 +309,7 @@ static bool tdb_check_free_record(struct tdb_context *tdb,
 }
 
 /* Slow, but should be very rare. */
-static size_t dead_space(struct tdb_context *tdb, tdb_off_t off)
+size_t tdb_dead_space(struct tdb_context *tdb, tdb_off_t off)
 {
 	size_t len;
 
@@ -407,7 +407,7 @@ int tdb_check(struct tdb_context *tdb,
 				found_recovery = true;
 				break;
 			}
-			dead = dead_space(tdb, off);
+			dead = tdb_dead_space(tdb, off);
 			if (dead < sizeof(rec))
 				goto corrupt;
 

+ 1 - 16
ccan/tdb/summary.c

@@ -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;
@@ -126,7 +111,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);

+ 1 - 0
ccan/tdb/tdb_private.h

@@ -304,4 +304,5 @@ int tdb_rec_free_read(struct tdb_context *tdb, tdb_off_t off,
 void tdb_header_hash(struct tdb_context *tdb,
 		     uint32_t *magic1_hash, uint32_t *magic2_hash);
 unsigned int tdb_old_hash(TDB_DATA *key);
+size_t tdb_dead_space(struct tdb_context *tdb, tdb_off_t off);
 #endif