Refactor zic.c to use is_digit like others use. * zic.c (is_digit): New static function, copied from localtime.c and from zdump.c. It’s too bad we can’t avoid duplication by putting this into private.h, because gcc -Wunused-function would then complain about it. Perhaps ‘inline’ would pacify gcc but then we’d have to port ‘inline’ to ancient compilers and anyway ‘inline’ is supposed to be just a performance hint which is not needed here. --- zic.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/zic.c b/zic.c index 39e1e2bc..30426621 100644 --- a/zic.c +++ b/zic.c @@ -229,6 +229,13 @@ static bool rulesub(struct rule * rp, const char * dayp, const char * timep); static zic_t tadd(zic_t t1, zic_t t2); +/* Is C an ASCII digit? */ +static bool +is_digit(char c) +{ + return '0' <= c && c <= '9'; +} + /* Bound on length of what %z can expand to. */ enum { PERCENT_Z_LEN_BOUND = sizeof "+995959" - 1 }; @@ -1852,7 +1859,7 @@ gethms(char const *string, char const *errstring) &hh, &hhx, &mm, &mmx, &ss, &ssx, &tenths, &xr, &xs)) { default: ok = false; break; case 8: - ok = '0' <= xr && xr <= '9'; + ok = is_digit(xr); ATTRIBUTE_FALLTHROUGH; case 7: ok &= ssx == '.'; @@ -3952,7 +3959,7 @@ newabbr(const char *string) cp = string; mp = NULL; - while (is_alpha(*cp) || ('0' <= *cp && *cp <= '9') + while (is_alpha(*cp) || is_digit(*cp) || *cp == '-' || *cp == '+') ++cp; if (noise && cp - string < 3) -- 2.51.0