From 41b870fba5d09653dd9f22315cbca47e9a8c0d31 Mon Sep 17 00:00:00 2001 From: Jani Nikula Date: Mon, 23 Feb 2015 18:56:14 +0200 Subject: [PATCH] lib: abstract bit validity check in bit test/set/clear macros Reduce duplication in the bit test/set/clear macros. No functional changes. --- lib/notmuch-private.h | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/lib/notmuch-private.h b/lib/notmuch-private.h index 012ad25c..02a8fc62 100644 --- a/lib/notmuch-private.h +++ b/lib/notmuch-private.h @@ -64,15 +64,14 @@ NOTMUCH_BEGIN_DECLS strncmp ((var), (literal), sizeof (literal) - 1) /* Robust bit test/set/reset macros */ +#define _NOTMUCH_VALID_BIT(bit) \ + ((bit) >= 0 && (bit) < CHAR_BIT * sizeof (unsigned long long)) #define NOTMUCH_TEST_BIT(val, bit) \ - (((bit) < 0 || (bit) >= CHAR_BIT * sizeof (unsigned long long)) ? 0 \ - : !!((val) & (1ull << (bit)))) + (_NOTMUCH_VALID_BIT(bit) ? !!((val) & (1ull << (bit))) : 0) #define NOTMUCH_SET_BIT(valp, bit) \ - (((bit) < 0 || (bit) >= CHAR_BIT * sizeof (unsigned long long)) ? *(valp) \ - : (*(valp) |= (1ull << (bit)))) + (_NOTMUCH_VALID_BIT(bit) ? (*(valp) |= (1ull << (bit))) : *(valp)) #define NOTMUCH_CLEAR_BIT(valp, bit) \ - (((bit) < 0 || (bit) >= CHAR_BIT * sizeof (unsigned long long)) ? *(valp) \ - : (*(valp) &= ~(1ull << (bit)))) + (_NOTMUCH_VALID_BIT(bit) ? (*(valp) &= ~(1ull << (bit))) : *(valp)) #define unused(x) x __attribute__ ((unused)) -- 2.26.2