From: Jani Nikula Date: Mon, 23 Feb 2015 16:56:14 +0000 (+0200) Subject: lib: abstract bit validity check in bit test/set/clear macros X-Git-Tag: 0.20~53 X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=commitdiff_plain;h=41b870fba5d09653dd9f22315cbca47e9a8c0d31;ds=sidebyside lib: abstract bit validity check in bit test/set/clear macros Reduce duplication in the bit test/set/clear macros. No functional changes. --- 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))