X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Ftdb%2Ftdb_private.h;h=babf01bd836f20dfbe771b6926e911b52d118260;hp=82e2ac9b3a5a877ca4f9360285c7428e785fc5c8;hb=87d99348a110a52fbc6e225b360e566fc474956a;hpb=f0d790f1304cf66b679e0c7ee92bc52933b562b8 diff --git a/ccan/tdb/tdb_private.h b/ccan/tdb/tdb_private.h index 82e2ac9b..babf01bd 100644 --- a/ccan/tdb/tdb_private.h +++ b/ccan/tdb/tdb_private.h @@ -64,7 +64,7 @@ #define __location__ __FILE__ ":" __STRINGSTRING(__LINE__) #endif -#if HAVE_GETPAGESIZE +#if !HAVE_GETPAGESIZE #define getpagesize() 0x2000 #endif @@ -72,7 +72,7 @@ typedef uint32_t tdb_len_t; typedef uint32_t tdb_off_t; #ifndef offsetof -#define offsetof(t,f) ((unsigned int)&((t *)0)->f) +#define offsetof(t,f) ((size_t)&((t *)0)->f) #endif #define TDB_MAGIC_FOOD "TDB file\n" @@ -82,6 +82,7 @@ typedef uint32_t tdb_off_t; #define TDB_DEAD_MAGIC (0xFEE1DEAD) #define TDB_RECOVERY_MAGIC (0xf53bc0e7U) #define TDB_RECOVERY_INVALID_MAGIC (0x0) +#define TDB_HASH_RWLOCK_MAGIC (0xbad1a51U) #define TDB_ALIGNMENT 4 #define DEFAULT_HASH_SIZE 131 #define FREELIST_TOP (sizeof(struct tdb_header)) @@ -179,7 +180,9 @@ struct tdb_header { tdb_off_t rwlocks; /* obsolete - kept to detect old formats */ tdb_off_t recovery_start; /* offset of transaction recovery region */ tdb_off_t sequence_number; /* used when TDB_SEQNUM is set */ - tdb_off_t reserved[29]; + uint32_t magic1_hash; /* hash of TDB_MAGIC_FOOD. */ + uint32_t magic2_hash; /* hash of TDB_MAGIC. */ + tdb_off_t reserved[27]; }; struct tdb_lock_type { @@ -211,8 +214,6 @@ struct tdb_methods { void (*next_hash_chain)(struct tdb_context *, uint32_t *); int (*tdb_oob)(struct tdb_context *, tdb_off_t , int ); int (*tdb_expand_file)(struct tdb_context *, tdb_off_t , tdb_off_t ); - int (*brlock)(struct tdb_context *, int, tdb_off_t, size_t, enum tdb_lock_flags); - int (*brunlock)(struct tdb_context *, int, tdb_off_t, size_t); }; struct tdb_context { @@ -284,6 +285,7 @@ int tdb_ofs_read(struct tdb_context *tdb, tdb_off_t offset, tdb_off_t *d); int tdb_ofs_write(struct tdb_context *tdb, tdb_off_t offset, tdb_off_t *d); int tdb_lock_record(struct tdb_context *tdb, tdb_off_t off); int tdb_unlock_record(struct tdb_context *tdb, tdb_off_t off); +bool tdb_needs_recovery(struct tdb_context *tdb); int tdb_rec_read(struct tdb_context *tdb, tdb_off_t offset, struct tdb_record *rec); int tdb_rec_write(struct tdb_context *tdb, tdb_off_t offset, struct tdb_record *rec); int tdb_do_delete(struct tdb_context *tdb, tdb_off_t rec_ptr, struct tdb_record *rec); @@ -299,6 +301,8 @@ void tdb_io_init(struct tdb_context *tdb); int tdb_expand(struct tdb_context *tdb, tdb_off_t size); int tdb_rec_free_read(struct tdb_context *tdb, tdb_off_t off, struct tdb_record *rec); - - +void tdb_header_hash(struct tdb_context *tdb, + uint32_t *magic1_hash, uint32_t *magic2_hash); +unsigned int tdb_old_hash(TDB_DATA *key); +size_t tdb_dead_space(struct tdb_context *tdb, tdb_off_t off); #endif