From: Timo Sirainen Date: Thu, 30 Mar 2017 17:38:44 +0000 (+0300) Subject: lib-index: Add macros to check if transaction log file version is new enough. X-Git-Tag: 2.2.29.rc1~33 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0713b92ce320d7c3768793fa4d67c340c66de0de;p=thirdparty%2Fdovecot%2Fcore.git lib-index: Add macros to check if transaction log file version is new enough. The version numbers are 8bit, so we can generate a single 16bit number out of them. --- diff --git a/src/lib-index/mail-transaction-log-file.c b/src/lib-index/mail-transaction-log-file.c index 7da4ca5349..f388846b43 100644 --- a/src/lib-index/mail-transaction-log-file.c +++ b/src/lib-index/mail-transaction-log-file.c @@ -529,7 +529,9 @@ mail_transaction_log_file_read_hdr(struct mail_transaction_log_file *file, return 0; } - if (file->hdr.minor_version >= 2 || file->hdr.major_version > 1) { + const unsigned int hdr_version = + MAIL_TRANSACTION_LOG_HDR_VERSION(&file->hdr); + if (MAIL_TRANSACTION_LOG_VERSION_HAVE(hdr_version, COMPAT_FLAGS)) { /* we have compatibility flags */ enum mail_index_header_compat_flags compat_flags = 0; diff --git a/src/lib-index/mail-transaction-log.h b/src/lib-index/mail-transaction-log.h index f1e997309b..b180467480 100644 --- a/src/lib-index/mail-transaction-log.h +++ b/src/lib-index/mail-transaction-log.h @@ -9,6 +9,16 @@ #define MAIL_TRANSACTION_LOG_MINOR_VERSION 2 #define MAIL_TRANSACTION_LOG_HEADER_MIN_SIZE 24 +#define MAIL_TRANSACTION_LOG_VERSION_FULL(major, minor) \ + ((major) << 8 | (minor)) +#define MAIL_TRANSACTION_LOG_VERSION_HAVE(version, wanted_feature) \ + ((version) >= MAIL_TRANSACTION_LOG_VERSION_##wanted_feature) +#define MAIL_TRANSACTION_LOG_HDR_VERSION(hdr) \ + MAIL_TRANSACTION_LOG_VERSION_FULL((hdr)->major_version, (hdr)->minor_version) + +#define MAIL_TRANSACTION_LOG_VERSION_COMPAT_FLAGS \ + MAIL_TRANSACTION_LOG_VERSION_FULL(1, 2) + struct mail_transaction_log_header { uint8_t major_version; uint8_t minor_version;