Messages in this thread Patch in this message | | | From | Arnd Bergmann <> | Subject | [PATCH v2] ctype.h: remove duplicate isdigit() helper | Date | Mon, 26 Oct 2020 20:20:58 +0100 |
| |
From: Arnd Bergmann <arnd@arndb.de>
gcc warns a few thousand times about the isdigit() shadow:
include/linux/ctype.h:26:19: warning: declaration of 'isdigit' shadows a built-in function [-Wshadow]
As there is already a compiler builtin, just use that, and make it clear we do that by defining a macro. Unfortunately, clang does not have the isdigit() builtin, so this has to be conditional.
Signed-off-by: Arnd Bergmann <arnd@arndb.de> --- include/linux/compiler.h | 6 ++++++ include/linux/ctype.h | 15 +++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/include/linux/compiler.h b/include/linux/compiler.h index ac45f6d40d39..b75b49f00ffd 100644 --- a/include/linux/compiler.h +++ b/include/linux/compiler.h @@ -136,6 +136,12 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val, } while (0) #endif +#ifdef __has_builtin +#define has_builtin(x) __has_builtin(x) +#else +#define has_builtin(x) (0) +#endif + /* * KENTRY - kernel entry point * This can be used to annotate symbols (functions or data) that are used diff --git a/include/linux/ctype.h b/include/linux/ctype.h index 363b004426db..df8233c84b67 100644 --- a/include/linux/ctype.h +++ b/include/linux/ctype.h @@ -2,6 +2,8 @@ #ifndef _LINUX_CTYPE_H #define _LINUX_CTYPE_H +#include <linux/compiler.h> + /* * NOTE! This ctype does not handle EOF like the standard C * library is required to. @@ -23,10 +25,6 @@ extern const unsigned char _ctype[]; #define isalnum(c) ((__ismask(c)&(_U|_L|_D)) != 0) #define isalpha(c) ((__ismask(c)&(_U|_L)) != 0) #define iscntrl(c) ((__ismask(c)&(_C)) != 0) -static inline int isdigit(int c) -{ - return '0' <= c && c <= '9'; -} #define isgraph(c) ((__ismask(c)&(_P|_U|_L|_D)) != 0) #define islower(c) ((__ismask(c)&(_L)) != 0) #define isprint(c) ((__ismask(c)&(_P|_U|_L|_D|_SP)) != 0) @@ -39,6 +37,15 @@ static inline int isdigit(int c) #define isascii(c) (((unsigned char)(c))<=0x7f) #define toascii(c) (((unsigned char)(c))&0x7f) +#if has_builtin(__builtin_isdigit) +#define isdigit(c) __builtin_isdigit(c) +#else +static inline int isdigit(int c) +{ + return '0' <= c && c <= '9'; +} +#endif + static inline unsigned char __tolower(unsigned char c) { if (isupper(c)) -- 2.27.0
| |