From 2ca55a93f2a11185d72dcb69006fd2c30b5c3144 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Fri, 17 Apr 2015 22:24:31 -0400 Subject: [PATCH] improve ctype.h macros to diagnose errors the casts of the argument to unsigned int suppressed diagnosis of errors like passing a pointer instead of a character. putting the actual function call in an unreachable branch restores any diagnostics that would be present if the macros didn't exist and functions were used. --- include/ctype.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/include/ctype.h b/include/ctype.h index a7d5db5d..cd2e0169 100644 --- a/include/ctype.h +++ b/include/ctype.h @@ -28,12 +28,12 @@ static __inline int __isspace(int _c) return _c == ' ' || (unsigned)_c-'\t' < 5; } -#define isalpha(a) ((((unsigned)(a)|32)-'a') < 26) -#define isdigit(a) (((unsigned)(a)-'0') < 10) -#define islower(a) (((unsigned)(a)-'a') < 26) -#define isupper(a) (((unsigned)(a)-'A') < 26) -#define isprint(a) (((unsigned)(a)-0x20) < 0x5f) -#define isgraph(a) (((unsigned)(a)-0x21) < 0x5e) +#define isalpha(a) (0 ? isalpha(a) : (((unsigned)(a)|32)-'a') < 26) +#define isdigit(a) (0 ? isdigit(a) : ((unsigned)(a)-'0') < 10) +#define islower(a) (0 ? islower(a) : ((unsigned)(a)-'a') < 26) +#define isupper(a) (0 ? isupper(a) : ((unsigned)(a)-'A') < 26) +#define isprint(a) (0 ? isprint(a) : ((unsigned)(a)-0x20) < 0x5f) +#define isgraph(a) (0 ? isgraph(a) : ((unsigned)(a)-0x21) < 0x5e) #define isspace(a) __isspace(a) #endif