[PATCH] Change is_digit from macro to function
This is cleaner and should be no slower with modern optimizers. * localtime.c, zdump.c (is_digit): New static function, replacing the old macro. * private.h (is_digit): Remove this macro. --- localtime.c | 7 +++++++ private.h | 3 --- zdump.c | 8 ++++++-- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/localtime.c b/localtime.c index 5f362d4..cc972ef 100644 --- a/localtime.c +++ b/localtime.c @@ -778,6 +778,13 @@ static const int year_lengths[2] = { DAYSPERNYEAR, DAYSPERLYEAR }; +/* Is C an ASCII digit? */ +static bool +is_digit(char c) +{ + return '0' <= c && c <= '9'; +} + /* ** Given a pointer into a timezone string, scan until a character that is not ** a valid character in a time zone abbreviation is found. diff --git a/private.h b/private.h index 98ead55..4c03324 100644 --- a/private.h +++ b/private.h @@ -225,9 +225,6 @@ #define R_OK 4 #endif /* !defined R_OK */ -/* Unlike <ctype.h>'s isdigit, this also works if c < 0 | c > UCHAR_MAX. */ -#define is_digit(c) ((unsigned)(c) - '0' <= 9) - /* ** Define HAVE_STDINT_H's default value here, rather than at the ** start, since __GLIBC__ and INTMAX_MAX's values depend on diff --git a/zdump.c b/zdump.c index 3c71894..9d22b26 100644 --- a/zdump.c +++ b/zdump.c @@ -99,8 +99,12 @@ static void showtrans(char const *, struct tm const *, time_t, char const *, static const char *tformat(void); static time_t yeartot(intmax_t) ATTRIBUTE_PURE; -/* Unlike <ctype.h>'s isdigit, this also works if c < 0 | c > UCHAR_MAX. */ -#define is_digit(c) ((unsigned)(c) - '0' <= 9) +/* Is C an ASCII digit? */ +static bool +is_digit(char c) +{ + return '0' <= c && c <= '9'; +} /* Is A an alphabetic character in the C locale? */ static bool -- 2.31.1
participants (1)
-
Paul Eggert