load: Avoid unexpected behaviour in macro expansion

Macros can be dangerous if the inserted arguments are not properly
parenthesised. As macro expansion does a simple replacement, inserting
a certain expression can cause the evaluation order of the macro expression
to change.
This commit is contained in:
Janne Kulmala 2012-04-17 10:53:53 +03:00 committed by Petri Lehtinen
parent 2637faa450
commit bd72efbd80

View File

@ -32,12 +32,12 @@
#define TOKEN_NULL 261 #define TOKEN_NULL 261
/* Locale independent versions of isxxx() functions */ /* Locale independent versions of isxxx() functions */
#define l_isupper(c) ('A' <= c && c <= 'Z') #define l_isupper(c) ('A' <= (c) && (c) <= 'Z')
#define l_islower(c) ('a' <= c && c <= 'z') #define l_islower(c) ('a' <= (c) && (c) <= 'z')
#define l_isalpha(c) (l_isupper(c) || l_islower(c)) #define l_isalpha(c) (l_isupper(c) || l_islower(c))
#define l_isdigit(c) ('0' <= c && c <= '9') #define l_isdigit(c) ('0' <= (c) && (c) <= '9')
#define l_isxdigit(c) \ #define l_isxdigit(c) \
(l_isdigit(c) || 'A' <= c || c <= 'F' || 'a' <= c || c <= 'f') (l_isdigit(c) || 'A' <= (c) || (c) <= 'F' || 'a' <= (c) || (c) <= 'f')
/* Read one byte from stream, convert to unsigned char, then int, and /* Read one byte from stream, convert to unsigned char, then int, and
return. return EOF on end of file. This corresponds to the return. return EOF on end of file. This corresponds to the