X-Git-Url: https://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Ftdb2%2Ftest%2Flayout.c;h=77ad1f8e12cc7dd27f2b69178e71226a003897a5;hp=d4f68cbf836a6d5f836215cb8e221a39df16bf3d;hb=ed81f39468c4d9089310fb4950b09c1f5886c4ef;hpb=51a56b52627e635566253a3fae081c3f466b6bb6 diff --git a/ccan/tdb2/test/layout.c b/ccan/tdb2/test/layout.c index d4f68cbf..77ad1f8e 100644 --- a/ccan/tdb2/test/layout.c +++ b/ccan/tdb2/test/layout.c @@ -92,6 +92,12 @@ static void set_free_record(void *mem, tdb_len_t len) /* We do all the work in add_to_freetable */ } +static void add_zero_pad(struct tdb_used_record *u, size_t len, size_t extra) +{ + if (extra) + ((char *)(u + 1))[len] = '\0'; +} + static void set_data_record(void *mem, struct tdb_context *tdb, struct tle_used *used) { @@ -103,6 +109,7 @@ static void set_data_record(void *mem, struct tdb_context *tdb, memcpy(u + 1, used->key.dptr, used->key.dsize); memcpy((char *)(u + 1) + used->key.dsize, used->data.dptr, used->data.dsize); + add_zero_pad(u, used->key.dsize + used->data.dsize, used->extra); } static void set_hashtable(void *mem, struct tdb_context *tdb, @@ -113,6 +120,7 @@ static void set_hashtable(void *mem, struct tdb_context *tdb, set_header(tdb, u, TDB_HTABLE_MAGIC, 0, len, len + htable->extra, 0); memset(u + 1, 0, len); + add_zero_pad(u, len, htable->extra); } static void set_freetable(void *mem, struct tdb_context *tdb, @@ -252,6 +260,8 @@ struct tdb_context *tdb_layout_get(struct tdb_layout *layout) } mem = malloc(off); + /* Fill with some weird pattern. */ + memset(mem, 0x99, off); /* Now populate our header, cribbing from a real TDB header. */ tdb = tdb_open(NULL, TDB_INTERNAL, O_RDWR, 0, &tap_log_attr); memcpy(mem, tdb->map_ptr, sizeof(struct tdb_header)); @@ -320,3 +330,17 @@ struct tdb_context *tdb_layout_get(struct tdb_layout *layout) return tdb; } + +void tdb_layout_free(struct tdb_layout *layout) +{ + unsigned int i; + + for (i = 0; i < layout->num_elems; i++) { + if (layout->elem[i].base.type == DATA) { + free(layout->elem[i].used.key.dptr); + free(layout->elem[i].used.data.dptr); + } + } + free(layout->elem); + free(layout); +}