From 60063b98e10db172d98e5eef5e4e65b4b8cd3f21 Mon Sep 17 00:00:00 2001 From: Dirk Ziegelmeier Date: Thu, 7 Dec 2017 12:01:09 +0100 Subject: [PATCH] Fix bug #52611: Incorrect use of ctype macros? by applying a modified version of Axel Lin's patch including Mike Kleshov's comments. --- src/include/lwip/arch.h | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/include/lwip/arch.h b/src/include/lwip/arch.h index 71863b7f..707c7918 100644 --- a/src/include/lwip/arch.h +++ b/src/include/lwip/arch.h @@ -213,17 +213,17 @@ typedef int ssize_t; #endif #if LWIP_NO_CTYPE_H -#define lwip_in_range(c, lo, up) ((u8_t)c >= lo && (u8_t)c <= up) -#define lwip_isdigit(c) lwip_in_range(c, '0', '9') -#define lwip_isxdigit(c) (lwip_isdigit(c) || lwip_in_range(c, 'a', 'f') || lwip_in_range(c, 'A', 'F')) -#define lwip_islower(c) lwip_in_range(c, 'a', 'z') -#define lwip_isspace(c) (c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || c == '\v') +#define lwip_in_range(c, lo, up) ((u8_t)(c) >= (lo) && (u8_t)(c) <= (up)) +#define lwip_isdigit(c) lwip_in_range((c), '0', '9') +#define lwip_isxdigit(c) (lwip_isdigit(c) || lwip_in_range((c), 'a', 'f') || lwip_in_range((c), 'A', 'F')) +#define lwip_islower(c) lwip_in_range((c), 'a', 'z') +#define lwip_isspace(c) ((c) == ' ' || (c) == '\f' || (c) == '\n' || (c) == '\r' || (c) == '\t' || (c) == '\v') #else #include -#define lwip_isdigit(c) isdigit((int)c) -#define lwip_isxdigit(c) isxdigit((int)c) -#define lwip_islower(c) islower((int)c) -#define lwip_isspace(c) isspace((int)c) +#define lwip_isdigit(c) isdigit((unsigned char)(c)) +#define lwip_isxdigit(c) isxdigit((unsigned char)(c)) +#define lwip_islower(c) islower((unsigned char)(c)) +#define lwip_isspace(c) isspace((unsigned char)(c)) #endif /** C++ const_cast(val) equivalent to remove constness from a value (GCC -Wcast-qual) */