#endif
#ifdef HAVE_GCRYPT
- if (f->fsprg_header)
- munmap(f->fsprg_header, PAGE_ALIGN(f->fsprg_size));
+ if (f->fsprg_file)
+ munmap(f->fsprg_file, PAGE_ALIGN(f->fsprg_file_size));
+ else if (f->fsprg_state)
+ free(f->fsprg_state);
+
+ free(f->fsprg_seed);
if (f->hmac)
gcry_md_close(f->hmac);
return mmap_cache_get(f->mmap, f->fd, f->prot, context, offset, size, ret);
}
-static bool verify_hash(Object *o) {
- uint64_t h1, h2;
-
- assert(o);
-
- if (o->object.type == OBJECT_DATA && !(o->object.flags & OBJECT_COMPRESSED)) {
- h1 = le64toh(o->data.hash);
- h2 = hash64(o->data.payload, le64toh(o->object.size) - offsetof(Object, data.payload));
- } else if (o->object.type == OBJECT_FIELD) {
- h1 = le64toh(o->field.hash);
- h2 = hash64(o->field.payload, le64toh(o->object.size) - offsetof(Object, field.payload));
- } else
- return true;
-
- return h1 == h2;
-}
-
static uint64_t minimum_header_size(Object *o) {
static uint64_t table[] = {
o = (Object*) t;
}
- if (!verify_hash(o))
- return -EBADMSG;
-
*ret = o;
return 0;
}
o->entry_array.next_entry_array_offset = htole64(q);
}
+ if (JOURNAL_HEADER_CONTAINS(f->header, n_entry_arrays))
+ f->header->n_entry_arrays = htole64(le64toh(f->header->n_entry_arrays) + 1);
+
*idx = htole64(hidx + 1);
return 0;
bool compress,
bool authenticate,
JournalMetrics *metrics,
- MMapCache *mmap,
+ MMapCache *mmap_cache,
JournalFile *template,
JournalFile **ret) {
size_t l;
char *p;
- r = journal_file_open(fname, flags, mode, compress, authenticate, metrics, mmap, template, ret);
+ r = journal_file_open(fname, flags, mode, compress, authenticate,
+ metrics, mmap_cache, template, ret);
if (r != -EBADMSG && /* corrupted */
r != -ENODATA && /* truncated */
r != -EHOSTDOWN && /* other machine */
log_warning("File %s corrupted or uncleanly shut down, renaming and replacing.", fname);
- return journal_file_open(fname, flags, mode, compress, authenticate, metrics, mmap, template, ret);
+ return journal_file_open(fname, flags, mode, compress, authenticate,
+ metrics, mmap_cache, template, ret);
}