From eab73b3deead4054ba8a1d9165b577ad935b9a05 Mon Sep 17 00:00:00 2001 From: William Wilgus Date: Mon, 29 Oct 2018 02:54:35 -0400 Subject: 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 --- apps/plugins/lua/liolib.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'apps/plugins/lua/liolib.c') 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 @@ #include "lauxlib.h" #include "lualib.h" #include "rocklibc.h" +#include "rocklib.h" #include "llimits.h" @@ -247,7 +248,7 @@ static int io_lines (lua_State *L) { static int read_number (lua_State *L, int *f) { lua_Number d; - if (PREFIX(fscanf)(*f, LUA_NUMBER_SCAN, &d) == 1) { + if (filetol(*f, &d) == 1) { /* was fscanf(f, LUA_NUMBER_SCAN, &d)*/ lua_pushnumber(L, d); return 1; } -- cgit v1.2.3