aboutsummaryrefslogtreecommitdiff
path: root/ports/esp8266/strtoll.c
diff options
context:
space:
mode:
Diffstat (limited to 'ports/esp8266/strtoll.c')
-rw-r--r--ports/esp8266/strtoll.c29
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;
+}