mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-12-10 13:45:10 -05:00
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
This commit is contained in:
parent
cc0a4c632a
commit
eab73b3dee
6 changed files with 66 additions and 295 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue