Fix up macros.
Macros need a healthy dose of parentheses to avoid expression-level
misparses. Most of this comes from the clang-tidy CL here:
https://android-review.googlesource.com/c/235696/
Also switch most of the macros to use do { ... } while (0) to avoid all
the excessive comma operators and statement-level misparses.
Change-Id: I4c2ee51e347d2aa8c74a2d82de63838b03bbb0f9
Reviewed-on: https://boringssl-review.googlesource.com/11660
Commit-Queue: David Benjamin <davidben@google.com>
Reviewed-by: Adam Langley <agl@google.com>
diff --git a/crypto/cipher/e_rc2.c b/crypto/cipher/e_rc2.c
index 67418d5..e1b4301 100644
--- a/crypto/cipher/e_rc2.c
+++ b/crypto/cipher/e_rc2.c
@@ -60,63 +60,68 @@
#include "internal.h"
-#define c2l(c, l) \
- (l = ((uint32_t)(*((c)++))), l |= ((uint32_t)(*((c)++))) << 8L, \
- l |= ((uint32_t)(*((c)++))) << 16L, \
- l |= ((uint32_t)(*((c)++))) << 24L)
+#define c2l(c, l) \
+ do { \
+ (l) = ((uint32_t)(*((c)++))); \
+ (l) |= ((uint32_t)(*((c)++))) << 8L; \
+ (l) |= ((uint32_t)(*((c)++))) << 16L; \
+ (l) |= ((uint32_t)(*((c)++))) << 24L; \
+ } while (0)
-#define c2ln(c, l1, l2, n) \
- { \
- c += n; \
- l1 = l2 = 0; \
- switch (n) { \
- case 8: \
- l2 = ((uint32_t)(*(--(c)))) << 24L; \
- case 7: \
- l2 |= ((uint32_t)(*(--(c)))) << 16L; \
- case 6: \
- l2 |= ((uint32_t)(*(--(c)))) << 8L; \
- case 5: \
- l2 |= ((uint32_t)(*(--(c)))); \
- case 4: \
- l1 = ((uint32_t)(*(--(c)))) << 24L; \
- case 3: \
- l1 |= ((uint32_t)(*(--(c)))) << 16L; \
- case 2: \
- l1 |= ((uint32_t)(*(--(c)))) << 8L; \
- case 1: \
- l1 |= ((uint32_t)(*(--(c)))); \
- } \
- }
+#define c2ln(c, l1, l2, n) \
+ do { \
+ (c) += (n); \
+ (l1) = (l2) = 0; \
+ switch (n) { \
+ case 8: \
+ (l2) = ((uint32_t)(*(--(c)))) << 24L; \
+ case 7: \
+ (l2) |= ((uint32_t)(*(--(c)))) << 16L; \
+ case 6: \
+ (l2) |= ((uint32_t)(*(--(c)))) << 8L; \
+ case 5: \
+ (l2) |= ((uint32_t)(*(--(c)))); \
+ case 4: \
+ (l1) = ((uint32_t)(*(--(c)))) << 24L; \
+ case 3: \
+ (l1) |= ((uint32_t)(*(--(c)))) << 16L; \
+ case 2: \
+ (l1) |= ((uint32_t)(*(--(c)))) << 8L; \
+ case 1: \
+ (l1) |= ((uint32_t)(*(--(c)))); \
+ } \
+ } while (0)
-#define l2c(l, c) \
- (*((c)++) = (uint8_t)(((l)) & 0xff), \
- *((c)++) = (uint8_t)(((l) >> 8L) & 0xff), \
- *((c)++) = (uint8_t)(((l) >> 16L) & 0xff), \
- *((c)++) = (uint8_t)(((l) >> 24L) & 0xff))
+#define l2c(l, c) \
+ do { \
+ *((c)++) = (uint8_t)(((l)) & 0xff); \
+ *((c)++) = (uint8_t)(((l) >> 8L) & 0xff); \
+ *((c)++) = (uint8_t)(((l) >> 16L) & 0xff); \
+ *((c)++) = (uint8_t)(((l) >> 24L) & 0xff); \
+ } while (0)
-#define l2cn(l1, l2, c, n) \
- { \
- c += n; \
- switch (n) { \
- case 8: \
+#define l2cn(l1, l2, c, n) \
+ do { \
+ (c) += (n); \
+ switch (n) { \
+ case 8: \
*(--(c)) = (uint8_t)(((l2) >> 24L) & 0xff); \
- case 7: \
+ case 7: \
*(--(c)) = (uint8_t)(((l2) >> 16L) & 0xff); \
- case 6: \
+ case 6: \
*(--(c)) = (uint8_t)(((l2) >> 8L) & 0xff); \
- case 5: \
+ case 5: \
*(--(c)) = (uint8_t)(((l2)) & 0xff); \
- case 4: \
+ case 4: \
*(--(c)) = (uint8_t)(((l1) >> 24L) & 0xff); \
- case 3: \
+ case 3: \
*(--(c)) = (uint8_t)(((l1) >> 16L) & 0xff); \
- case 2: \
+ case 2: \
*(--(c)) = (uint8_t)(((l1) >> 8L) & 0xff); \
- case 1: \
+ case 1: \
*(--(c)) = (uint8_t)(((l1)) & 0xff); \
- } \
- }
+ } \
+ } while (0)
typedef struct rc2_key_st { uint16_t data[64]; } RC2_KEY;