]> git.ozlabs.org Git - ccan/blobdiff - ccan/tdb2/test/layout.c
tdb2: allow multiple chain locks.
[ccan] / ccan / tdb2 / test / layout.c
index 16f077198dbea011a2e9510a9b6dc1aa1b938260..7549798e76b39690e57e3a9bbf34c55c1be0ea45 100644 (file)
@@ -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,
@@ -256,12 +264,12 @@ struct tdb_context *tdb_layout_get(struct tdb_layout *layout)
        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++) {
@@ -311,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);