#ifndef COSMOPOLITAN_LIBC_FMT_STRTOL_H_ #define COSMOPOLITAN_LIBC_FMT_STRTOL_H_ #include "libc/errno.h" #include "libc/str/str.h" #define CONSUME_SPACES(t, s, c) \ if (endptr) \ *endptr = (t *)(s); \ while (c == ' ' || c == '\t') \ c = *++s #define GET_SIGN(s, c, d) \ d = c == '-' ? -1 : 1; \ if (c == '-' || c == '+') \ c = *++s #define GET_RADIX(s, c, r) \ if (!r) { \ if (c == '0') { \ t |= 1; \ c = *++s; \ if ((c == 'x' || c == 'X') && isxdigit(s[1])) { \ c = *++s; \ r = 16; \ } else if ((c == 'b' || c == 'B') && (s[1] == '0' || s[1] == '1')) { \ c = *++s; \ r = 2; \ } else { \ r = 8; \ } \ } else { \ r = 10; \ } \ } else if (!(2 <= r && r <= 36)) { \ errno = EINVAL; \ return 0; \ } else if (c == '0') { \ t |= 1; \ c = *++s; \ if ((r == 2 && \ ((c == 'b' || c == 'B') && (s[1] == '0' || s[1] == '1'))) || \ (r == 16 && ((c == 'x' || c == 'X') && isxdigit(s[1])))) { \ c = *++s; \ } \ } int __vcscanf(int (*)(void *), int (*)(int, void *), void *, const char *, va_list); int __fmt(void *, void *, const char *, va_list); #endif /* COSMOPOLITAN_LIBC_FMT_STRTOL_H_ */