journal-file: factor out helper function

In preparation for later changes.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2017-01-24 19:00:23 -05:00
parent 2d058a87ff
commit 4214009f8a

View file

@ -507,42 +507,43 @@ static int journal_file_refresh_header(JournalFile *f) {
return r;
}
static int journal_file_verify_header(JournalFile *f) {
static bool warn_wrong_flags(const JournalFile *f, bool compatible) {
const uint32_t any = compatible ? HEADER_COMPATIBLE_ANY : HEADER_INCOMPATIBLE_ANY,
supported = compatible ? HEADER_COMPATIBLE_SUPPORTED : HEADER_INCOMPATIBLE_SUPPORTED;
const char *type = compatible ? "compatible" : "incompatible";
uint32_t flags;
flags = le32toh(compatible ? f->header->compatible_flags : f->header->incompatible_flags);
if (flags & ~supported) {
if (flags & ~any)
log_debug("Journal file %s has unknown %s flags %"PRIx32,
f->path, type, flags & ~any);
flags = (flags & any) & ~supported;
if (flags)
log_debug("Journal file %s uses %s flags %"PRIx32" disabled at compilation time.",
f->path, type, flags);
return true;
}
return false;
}
static int journal_file_verify_header(JournalFile *f) {
assert(f);
assert(f->header);
if (memcmp(f->header->signature, HEADER_SIGNATURE, 8))
return -EBADMSG;
/* In both read and write mode we refuse to open files with
* incompatible flags we don't know */
flags = le32toh(f->header->incompatible_flags);
if (flags & ~HEADER_INCOMPATIBLE_SUPPORTED) {
if (flags & ~HEADER_INCOMPATIBLE_ANY)
log_debug("Journal file %s has unknown incompatible flags %"PRIx32,
f->path, flags & ~HEADER_INCOMPATIBLE_ANY);
flags = (flags & HEADER_INCOMPATIBLE_ANY) & ~HEADER_INCOMPATIBLE_SUPPORTED;
if (flags)
log_debug("Journal file %s uses incompatible flags %"PRIx32
" disabled at compilation time.", f->path, flags);
/* In both read and write mode we refuse to open files with incompatible
* flags we don't know. */
if (warn_wrong_flags(f, false))
return -EPROTONOSUPPORT;
}
/* When open for writing we refuse to open files with
* compatible flags, too */
flags = le32toh(f->header->compatible_flags);
if (f->writable && (flags & ~HEADER_COMPATIBLE_SUPPORTED)) {
if (flags & ~HEADER_COMPATIBLE_ANY)
log_debug("Journal file %s has unknown compatible flags %"PRIx32,
f->path, flags & ~HEADER_COMPATIBLE_ANY);
flags = (flags & HEADER_COMPATIBLE_ANY) & ~HEADER_COMPATIBLE_SUPPORTED;
if (flags)
log_debug("Journal file %s uses compatible flags %"PRIx32
" disabled at compilation time.", f->path, flags);
/* When open for writing we refuse to open files with compatible flags, too. */
if (f->writable && warn_wrong_flags(f, true))
return -EPROTONOSUPPORT;
}
if (f->header->state >= _STATE_MAX)
return -EBADMSG;