summaryrefslogtreecommitdiff
path: root/apps/plugins/lua/liolib.c
diff options
context:
space:
mode:
authorWilliam Wilgus <me.theuser@yahoo.com>2018-10-29 02:54:35 -0400
committerWilliam Wilgus <me.theuser@yahoo.com>2018-10-29 23:22:35 -0400
commiteab73b3deead4054ba8a1d9165b577ad935b9a05 (patch)
treeadf00c7efe610bb268a26109aa7cd9de3b26ca09 /apps/plugins/lua/liolib.c
parentcc0a4c632aeda82ab4517355b4b4489190da013e (diff)
downloadrockbox-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.c3
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
248static int read_number (lua_State *L, int *f) { 249static 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 }