Improve macro hygiene
This commit improves hygiene and formatting of macro definitions
throughout the library. Specifically:
- It adds brackets around parameters to avoid unintended
interpretation of arguments, e.g. due to operator precedence.
- It adds uses of the `do { ... } while( 0 )` idiom for macros that
can be used as commands.
diff --git a/programs/ssl/ssl_server2.c b/programs/ssl/ssl_server2.c
index 5bce958..8c851ac 100644
--- a/programs/ssl/ssl_server2.c
+++ b/programs/ssl/ssl_server2.c
@@ -615,11 +615,14 @@
* Used by sni_parse and psk_parse to handle coma-separated lists
*/
#define GET_ITEM( dst ) \
- dst = p; \
- while( *p != ',' ) \
- if( ++p > end ) \
- goto error; \
- *p++ = '\0';
+ do \
+ { \
+ (dst) = p; \
+ while( *p != ',' ) \
+ if( ++p > end ) \
+ goto error; \
+ *p++ = '\0'; \
+ } while( 0 )
#if defined(SNI_OPTION)
typedef struct _sni_entry sni_entry;
@@ -776,15 +779,18 @@
#if defined(MBEDTLS_KEY_EXCHANGE__SOME__PSK_ENABLED)
-#define HEX2NUM( c ) \
- if( c >= '0' && c <= '9' ) \
- c -= '0'; \
- else if( c >= 'a' && c <= 'f' ) \
- c -= 'a' - 10; \
- else if( c >= 'A' && c <= 'F' ) \
- c -= 'A' - 10; \
- else \
- return( -1 );
+#define HEX2NUM( c ) \
+ do \
+ { \
+ if( (c) >= '0' && (c) <= '9' ) \
+ (c) -= '0'; \
+ else if( (c) >= 'a' && (c) <= 'f' ) \
+ (c) -= 'a' - 10; \
+ else if( (c) >= 'A' && (c) <= 'F' ) \
+ (c) -= 'A' - 10; \
+ else \
+ return( -1 ); \
+ } while( 0 )
/*
* Convert a hex string to bytes.