diff --git a/lib/roken/strtoll.c b/lib/roken/strtoll.c index 1be876131..f5ba9338b 100644 --- a/lib/roken/strtoll.c +++ b/lib/roken/strtoll.c @@ -57,6 +57,7 @@ strtoll(const char * nptr, char ** endptr, int base) { const char *s; unsigned long long acc; + long long ret = 0; char c; unsigned long long cutoff; int neg, any, cutlim; @@ -135,15 +136,14 @@ strtoll(const char * nptr, char ** endptr, int base) } } if (any < 0) { - acc = neg ? LLONG_MIN : LLONG_MAX; + ret = neg ? LLONG_MIN : LLONG_MAX; errno = ERANGE; } else if (!any) { noconv: errno = EINVAL; } else if (neg) - acc = -acc; + ret = -(long long)acc; if (endptr != NULL) *endptr = (char *)(any ? s - 1 : nptr); - return (acc); + return ret; } -