summaryrefslogtreecommitdiff
path: root/esp8266/strtoll.c
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2014-11-28 14:58:25 +0000
committerDamien George <damien.p.george@gmail.com>2014-11-28 14:58:25 +0000
commitfbea8100432abbdfde3d866d5bea1d8b4f87d217 (patch)
treef78953ebda69a6c76df5ef509f17955d711e9944 /esp8266/strtoll.c
parent5f100657188c3f6e53db9d90f7ceebc4753bf44b (diff)
esp8266: Change bignum from mpz to longlong; move some rodata to iram.
Some rodata items can go in iram/irom segment, but not others. With this patch ESP now has 24256 bytes of heap ram. It passes 228 out of 248 tests from tests/basics directory.
Diffstat (limited to 'esp8266/strtoll.c')
-rw-r--r--esp8266/strtoll.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/esp8266/strtoll.c b/esp8266/strtoll.c
new file mode 100644
index 000000000..4e8a4d056
--- /dev/null
+++ b/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;
+}