diff options
author | Damien George <damien.p.george@gmail.com> | 2014-11-28 14:58:25 +0000 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2014-11-28 14:58:25 +0000 |
commit | fbea8100432abbdfde3d866d5bea1d8b4f87d217 (patch) | |
tree | f78953ebda69a6c76df5ef509f17955d711e9944 /esp8266/strtoll.c | |
parent | 5f100657188c3f6e53db9d90f7ceebc4753bf44b (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.c | 29 |
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; +} |