@@ -3,21 +3,41 @@ #include #include #include /* We only handle base 10. */ -unsigned long long int strtoull(const char *nptr, char **endptr, int base) { +long long int strtoull(const char *nptr, char **endptr, int base) { unsigned long long int retval = 0; const char **endptrd = (const char **) endptr; char *idx = NULL; + int allowspace = 1; + + idx = nptr; + while (1) { + if (*idx == '\0') { + break; + } - for (idx = nptr; *idx != '\0' && isdigit(*idx); idx++) { + if (!isdigit(*idx)) { + if (*idx == '-') { + retval *= -1; + continue; + } + if ((*idx == ' ' || *idx == '\t') && allowspace) { + continue + } + break; + } + retval *= 10; retval += (*idx - '0'); + + allowspace = 0; + idx++; } if (endptrd != NULL) { *endptrd = idx; } return(retval); }