diff options
author | William Wilgus <me.theuser@yahoo.com> | 2018-10-29 02:54:35 -0400 |
---|---|---|
committer | William Wilgus <me.theuser@yahoo.com> | 2018-10-29 23:22:35 -0400 |
commit | eab73b3deead4054ba8a1d9165b577ad935b9a05 (patch) | |
tree | adf00c7efe610bb268a26109aa7cd9de3b26ca09 /apps/plugins/lua/liolib.c | |
parent | cc0a4c632aeda82ab4517355b4b4489190da013e (diff) | |
download | rockbox-eab73b3deead4054ba8a1d9165b577ad935b9a05.tar.gz rockbox-eab73b3deead4054ba8a1d9165b577ad935b9a05.zip |
Lua replace fscanf
Rocklua was using the full fscanf implementation
to simply read %ld for the file:read("*n") function
wasting 1k on unneeded/unused functionality
Instead, I've implemented a filetol function to duplicate it
without the extra overhead using strtol which as an added bonus
ERANGE errors now resolve to LONG_MIN and LONGMAX instead of
integer overflow
filetol()
reads long int from an open file, skips preceding
whitespaces returns -1 if error, 1 on success.
*num set to LONG_MAX or LONG_MIN on overflow.
If number of digits is > than LUAI_MAXNUMBER2STR
filepointer will continue till the next non digit
but buffer will stop being filled with characters.
Preceding zero is ignored.
Change-Id: Ia42d0f73c63a894625bca4581e9b7e1cc7387fd2
Diffstat (limited to 'apps/plugins/lua/liolib.c')
-rw-r--r-- | apps/plugins/lua/liolib.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/apps/plugins/lua/liolib.c b/apps/plugins/lua/liolib.c index 970543d4d5..6744efedd5 100644 --- a/apps/plugins/lua/liolib.c +++ b/apps/plugins/lua/liolib.c | |||
@@ -17,6 +17,7 @@ | |||
17 | #include "lauxlib.h" | 17 | #include "lauxlib.h" |
18 | #include "lualib.h" | 18 | #include "lualib.h" |
19 | #include "rocklibc.h" | 19 | #include "rocklibc.h" |
20 | #include "rocklib.h" | ||
20 | 21 | ||
21 | #include "llimits.h" | 22 | #include "llimits.h" |
22 | 23 | ||
@@ -247,7 +248,7 @@ static int io_lines (lua_State *L) { | |||
247 | 248 | ||
248 | static int read_number (lua_State *L, int *f) { | 249 | static int read_number (lua_State *L, int *f) { |
249 | lua_Number d; | 250 | lua_Number d; |
250 | if (PREFIX(fscanf)(*f, LUA_NUMBER_SCAN, &d) == 1) { | 251 | if (filetol(*f, &d) == 1) { /* was fscanf(f, LUA_NUMBER_SCAN, &d)*/ |
251 | lua_pushnumber(L, d); | 252 | lua_pushnumber(L, d); |
252 | return 1; | 253 | return 1; |
253 | } | 254 | } |