X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Ftdb2%2Ftest%2Flayout.c;h=6fcee6d482a581f35d4974f29de161b502b4682a;hp=ad775c8ad49483f4275d1fedb0bc718bd1b6e9b4;hb=024a5647e6c81735a93d826b56db0db4bf86fab8;hpb=c56e2b1b5e51b094d53f4012e226b352a91618f6 diff --git a/ccan/tdb2/test/layout.c b/ccan/tdb2/test/layout.c index ad775c8a..6fcee6d4 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, @@ -141,7 +149,8 @@ static void add_to_freetable(struct tdb_context *tdb, { tdb->ftable_off = freetable->base.off; tdb->ftable = ftable; - add_free_record(tdb, eoff, sizeof(struct tdb_used_record) + elen); + add_free_record(tdb, eoff, sizeof(struct tdb_used_record) + elen, + TDB_LOCK_WAIT, false); } static tdb_off_t hbucket_off(tdb_off_t group_start, unsigned ingroup) @@ -252,14 +261,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 +320,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);