From 0d916b164851ca6a8393c4d1b379883bafaf854f Mon Sep 17 00:00:00 2001 From: ache Date: Sun, 2 Dec 2001 09:15:54 +0000 Subject: Make it works for non ASCII compatible encodings too. The only assumption left is that 'A'..'Z' 'a'..'z' both are contiguous --- lib/libc/stdlib/strtoumax.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'lib/libc/stdlib/strtoumax.c') diff --git a/lib/libc/stdlib/strtoumax.c b/lib/libc/stdlib/strtoumax.c index ea59245..a2da678 100644 --- a/lib/libc/stdlib/strtoumax.c +++ b/lib/libc/stdlib/strtoumax.c @@ -58,7 +58,7 @@ strtoumax(nptr, endptr, base) uintmax_t acc; unsigned char c; uintmax_t cutoff; - int neg, any, cutlim; + int neg, any, cutlim, n; /* * See strtoimax for comments as to the logic used. @@ -91,19 +91,19 @@ strtoumax(nptr, endptr, base) cutlim = UINTMAX_MAX % base; for ( ; ; c = *s++) { if (isxdigit(c)) - c = digittoint(c); - else if (isascii(c) && isalpha(c)) - c -= isupper(c) ? 'A' - 10 : 'a' - 10; + n = digittoint(c); + else if (isalpha(c)) + n = (char)c - (isupper(c) ? 'A' - 10 : 'a' - 10); else break; - if (c >= base) + if (n < 0 || n >= base) break; - if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim)) + if (any < 0 || acc > cutoff || (acc == cutoff && n > cutlim)) any = -1; else { any = 1; acc *= base; - acc += c; + acc += n; } } if (any < 0) { -- cgit v1.1