if (f->mmap)
mmap_cache_unref(f->mmap);
- hashmap_free_free(f->chain_cache);
+ ordered_hashmap_free_free(f->chain_cache);
#if defined(HAVE_XZ) || defined(HAVE_LZ4)
free(f->compress_buffer);
return -EADDRNOTAVAIL;
}
- return mmap_cache_get(f->mmap, f->fd, f->prot, context, keep_always, offset, size, &f->last_stat, ret);
+ return mmap_cache_get(f->mmap, f->fd, f->prot, context, keep_always, offset, size, &f->last_stat, ret, NULL);
}
static uint64_t minimum_header_size(Object *o) {
__sync_synchronize();
if (ftruncate(f->fd, f->last_stat.st_size) < 0)
- log_error("Failed to truncate file to its own size: %m");
+ log_error_errno(errno, "Failed to truncate file to its own size: %m");
}
static int entry_item_cmp(const void *_a, const void *_b) {
} ChainCacheItem;
static void chain_cache_put(
- Hashmap *h,
+ OrderedHashmap *h,
ChainCacheItem *ci,
uint64_t first,
uint64_t array,
if (array == first)
return;
- if (hashmap_size(h) >= CHAIN_CACHE_MAX)
- ci = hashmap_steal_first(h);
- else {
+ if (ordered_hashmap_size(h) >= CHAIN_CACHE_MAX) {
+ ci = ordered_hashmap_steal_first(h);
+ assert(ci);
+ } else {
ci = new(ChainCacheItem, 1);
if (!ci)
return;
ci->first = first;
- if (hashmap_put(h, &ci->first, ci) < 0) {
+ if (ordered_hashmap_put(h, &ci->first, ci) < 0) {
free(ci);
return;
}
a = first;
/* Try the chain cache first */
- ci = hashmap_get(f->chain_cache, &first);
+ ci = ordered_hashmap_get(f->chain_cache, &first);
if (ci && i > ci->total) {
a = ci->array;
i -= ci->total;
/* Start with the first array in the chain */
a = first;
- ci = hashmap_get(f->chain_cache, &first);
+ ci = ordered_hashmap_get(f->chain_cache, &first);
if (ci && n > ci->total) {
/* Ah, we have iterated this bisection array chain
* previously! Let's see if we can skip ahead in the
}
}
- if (k > n) {
+ if (k >= n) {
if (direction == DIRECTION_UP) {
i = n;
subtract_one = true;
goto fail;
}
- f->chain_cache = hashmap_new(&uint64_hash_ops);
+ f->chain_cache = ordered_hashmap_new(&uint64_hash_ops);
if (!f->chain_cache) {
r = -ENOMEM;
goto fail;