struct traverse_info {
struct traverse_level {
tdb_off_t hashtable;
- const tdb_off_t *entries;
/* We ignore groups here, and treat it as a big array. */
unsigned entry;
unsigned int total_buckets;
/* How much space has been mapped (<= current file size) */
tdb_len_t map_size;
- /* Opened read-only? */
+ /* Operating read-only? (Opened O_RDONLY, or in traverse_read) */
bool read_only;
+ /* mmap read only? */
+ int mmap_flags;
+
/* Error code for last tdb error. */
enum TDB_ERROR ecode;
struct tdb_data key,
int ltype,
struct hash_info *h,
- struct tdb_used_record *rec);
+ struct tdb_used_record *rec,
+ struct traverse_info *tinfo);
int replace_in_hash(struct tdb_context *tdb,
struct hash_info *h,
/* Clear an ondisk area. */
int zero_out(struct tdb_context *tdb, tdb_off_t off, tdb_len_t len);
-/* Return a non-zero offset in this array, or num. */
-tdb_off_t tdb_find_nonzero_off(struct tdb_context *tdb, tdb_off_t off,
- uint64_t num);
+/* Return a non-zero offset between >= start < end in this array (or end). */
+tdb_off_t tdb_find_nonzero_off(struct tdb_context *tdb,
+ tdb_off_t base,
+ uint64_t start,
+ uint64_t end);
/* Return a zero offset in this array, or num. */
tdb_off_t tdb_find_zero_off(struct tdb_context *tdb, tdb_off_t off,