diff options
Diffstat (limited to 'ports/esp8266/strtoll.c')
| -rw-r--r-- | ports/esp8266/strtoll.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/ports/esp8266/strtoll.c b/ports/esp8266/strtoll.c new file mode 100644 index 000000000..4e8a4d056 --- /dev/null +++ b/ports/esp8266/strtoll.c @@ -0,0 +1,29 @@ +#include <stdlib.h> + +// assumes endptr != NULL +// doesn't check for sign +// doesn't check for base-prefix +long long int strtoll(const char *nptr, char **endptr, int base) { + long long val = 0; + + for (; *nptr; nptr++) { + int v = *nptr; + if ('0' <= v && v <= '9') { + v -= '0'; + } else if ('A' <= v && v <= 'Z') { + v -= 'A' - 10; + } else if ('a' <= v && v <= 'z') { + v -= 'a' - 10; + } else { + break; + } + if (v >= base) { + break; + } + val = val * base + v; + } + + *endptr = (char*)nptr; + + return val; +} |
