X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Ftdb2%2Ftest%2Flayout.c;h=02afdd2362918e4072750bb338b5ca45ee250f9f;hb=2ecf943a99c427b10a998f0285dd184b1a25ac65;hp=27c2d0459d1439fdbe9af7cd4e8bc1866023b70c;hpb=9071df66fc6a29cc8b6cd52c91134efe7b57f007;p=ccan diff --git a/ccan/tdb2/test/layout.c b/ccan/tdb2/test/layout.c index 27c2d045..02afdd23 100644 --- a/ccan/tdb2/test/layout.c +++ b/ccan/tdb2/test/layout.c @@ -237,22 +237,15 @@ struct tdb_context *tdb_layout_get(struct tdb_layout *layout) case HASHTABLE: len = hashtable_len(&e->hashtable); break; + default: + abort(); } off += len; assert(zone_left >= len); zone_left -= len; } - /* Fill final zone with free record. */ - if (zone_left != 0) { - tdb_layout_add_free(layout, - zone_left - - sizeof(struct tdb_used_record)); - layout->elem[layout->num_elems-1].base.off = off; - off += zone_left; - } - - mem = malloc(off+1); + mem = malloc(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)); @@ -260,7 +253,7 @@ struct tdb_context *tdb_layout_get(struct tdb_layout *layout) /* Mug the tdb we have to make it use this. */ free(tdb->map_ptr); tdb->map_ptr = mem; - tdb->map_size = off+1; + tdb->map_size = off; for (i = 0; i < layout->num_elems; i++) { union tdb_layout_elem *e = &layout->elem[i]; @@ -302,21 +295,20 @@ struct tdb_context *tdb_layout_get(struct tdb_layout *layout) } } - /* Write tailer. */ - ((uint8_t *)tdb->map_ptr)[tdb->map_size-1] = last_zone->zone_bits; - /* Get physical if they asked for it. */ if (layout->filename) { int fd = open(layout->filename, O_WRONLY|O_TRUNC|O_CREAT, 0600); if (fd < 0) err(1, "opening %s for writing", layout->filename); - write(fd, tdb->map_ptr, tdb->map_size); + if (write(fd, tdb->map_ptr, tdb->map_size) != tdb->map_size) + err(1, "writing %s", layout->filename); close(fd); tdb_close(tdb); /* NOMMAP is for lockcheck. */ tdb = tdb_open(layout->filename, TDB_NOMMAP, O_RDWR, 0, &tap_log_attr); } + return tdb; }