X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Ftdb2%2Ftest%2Flayout.c;h=7549798e76b39690e57e3a9bbf34c55c1be0ea45;hb=156e5eb92f1d986957cb081b58320579c6e366dd;hp=ad775c8ad49483f4275d1fedb0bc718bd1b6e9b4;hpb=c56e2b1b5e51b094d53f4012e226b352a91618f6;p=ccan diff --git a/ccan/tdb2/test/layout.c b/ccan/tdb2/test/layout.c index ad775c8a..7549798e 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,14 +260,16 @@ 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)); + memcpy(mem, tdb->file->map_ptr, sizeof(struct tdb_header)); /* Mug the tdb we have to make it use this. */ - free(tdb->map_ptr); - tdb->map_ptr = mem; - tdb->map_size = off; + free(tdb->file->map_ptr); + tdb->file->map_ptr = mem; + tdb->file->map_size = off; last_ftable = 0; for (i = 0; i < layout->num_elems; i++) { @@ -309,7 +319,8 @@ struct tdb_context *tdb_layout_get(struct tdb_layout *layout) 0600); if (fd < 0) err(1, "opening %s for writing", layout->filename); - if (write(fd, tdb->map_ptr, tdb->map_size) != tdb->map_size) + if (write(fd, tdb->file->map_ptr, tdb->file->map_size) + != tdb->file->map_size) err(1, "writing %s", layout->filename); close(fd); tdb_close(tdb);