diff options
author | Rusty Russell <rusty@rustcorp.com.au> | 2011-12-05 17:04:30 +1030 |
---|---|---|
committer | Rusty Russell <rusty@rustcorp.com.au> | 2011-12-05 17:04:30 +1030 |
commit | 80c3ba8123ed6708ebf3afad9ed78037e571a81d (patch) | |
tree | 242254821b79c3301e4af95b8c38ae8beeb04cba /lib/tdb2/test/layout.h | |
parent | 3f99fc16a0a3aead82cf8cdfb9703f8f18388623 (diff) | |
download | samba-80c3ba8123ed6708ebf3afad9ed78037e571a81d.tar.gz samba-80c3ba8123ed6708ebf3afad9ed78037e571a81d.tar.bz2 samba-80c3ba8123ed6708ebf3afad9ed78037e571a81d.zip |
tdb2: add a capability list from the header.
This allows even more extensibility in future: in particular, the top
bits of each capability tell us what to do if we don't understand it:
fail the open, fail to open for write, or don't try to check the
format.
tdb_check needs to understand the capability list so it can know to
skip over it: each element in the list is prefixed with the type tag
and the length.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
(Imported from CCAN commit 35f198de1851a7d57064546b7ced677b6fabee27)
Diffstat (limited to 'lib/tdb2/test/layout.h')
-rw-r--r-- | lib/tdb2/test/layout.h | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/lib/tdb2/test/layout.h b/lib/tdb2/test/layout.h index 6649113766..9a71484601 100644 --- a/lib/tdb2/test/layout.h +++ b/lib/tdb2/test/layout.h @@ -9,21 +9,30 @@ void tdb_layout_add_free(struct tdb_layout *layout, tdb_len_t len, void tdb_layout_add_used(struct tdb_layout *layout, TDB_DATA key, TDB_DATA data, tdb_len_t extra); +void tdb_layout_add_capability(struct tdb_layout *layout, + uint64_t type, + bool write_breaks, + bool check_breaks, + bool open_breaks, + tdb_len_t extra); + #if 0 /* FIXME: Allow allocation of subtables */ void tdb_layout_add_hashtable(struct tdb_layout *layout, int htable_parent, /* -1 == toplevel */ unsigned int bucket, tdb_len_t extra); #endif +/* freefn is needed if we're using failtest_free. */ struct tdb_context *tdb_layout_get(struct tdb_layout *layout, + void (*freefn)(void *), union tdb_attribute *attr); -void tdb_layout_write(struct tdb_layout *layout, union tdb_attribute *attr, - const char *filename); +void tdb_layout_write(struct tdb_layout *layout, void (*freefn)(void *), + union tdb_attribute *attr, const char *filename); void tdb_layout_free(struct tdb_layout *layout); enum layout_type { - FREETABLE, FREE, DATA, HASHTABLE, + FREETABLE, FREE, DATA, HASHTABLE, CAPABILITY }; /* Shared by all union members. */ @@ -56,12 +65,19 @@ struct tle_hashtable { tdb_len_t extra; }; +struct tle_capability { + struct tle_base base; + uint64_t type; + tdb_len_t extra; +}; + union tdb_layout_elem { struct tle_base base; struct tle_freetable ftable; struct tle_free free; struct tle_used used; struct tle_hashtable hashtable; + struct tle_capability capability; }; struct tdb_layout { |