41#include <sys/limits.h>
50strtouq(
const char *nptr,
char **endptr,
int base)
55 u_quad_t qbase, cutoff;
72 if ((base == 0 || base == 16) &&
73 c ==
'0' && (*s ==
'x' || *s ==
'X')) {
79 base =
c ==
'0' ? 8 : 10;
80 qbase = (unsigned)base;
81 cutoff = (u_quad_t)UQUAD_MAX / qbase;
82 cutlim = (u_quad_t)UQUAD_MAX % qbase;
83 for (acc = 0, any = 0;;
c = *s++) {
89 c -= isupper(
c) ?
'A' - 10 :
'a' - 10;
94 if (any < 0 || acc > cutoff || (acc == cutoff &&
c > cutlim))
107 *endptr = __DECONST(
char *, any ? s - 1 : nptr);
u_quad_t strtouq(const char *nptr, char **endptr, int base)