changeset 21875:7c51ff56653a

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.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Thu, 30 Mar 2017 20:38:44 +0300
parents 02be39ae109d
children ccbdafa83dbc
files src/lib-index/mail-transaction-log-file.c src/lib-index/mail-transaction-log.h
diffstat 2 files changed, 13 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-index/mail-transaction-log-file.c	Wed Mar 29 01:25:21 2017 +0200
+++ b/src/lib-index/mail-transaction-log-file.c	Thu Mar 30 20:38:44 2017 +0300
@@ -529,7 +529,9 @@
 		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;
 
--- a/src/lib-index/mail-transaction-log.h	Wed Mar 29 01:25:21 2017 +0200
+++ b/src/lib-index/mail-transaction-log.h	Thu Mar 30 20:38:44 2017 +0300
@@ -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;