Fixes warnings (probably) introduced with 64-bit. Mainly explicit typecasts to int to silence "possible loss of precision" warnings. These are lengths of filenames, so they're not going to exceed 4GB.
* Dynamically size getcwd() buffer in get_dir function
This should fix issue 42.
* Fixup: Properly respect NO_GETCWD
* Fixup: Get rid of getcwd_error, handle NO_GETCWD in a single place
When the second argument is not a string, _file_info() wants to
ensure that there is a table on top of the stack: the second argument
or a new table. If a new table is pushed it's created on top immediately,
but if a table is passed as the second argument it can be followed
by extra arguments, with the last one ending up being used as a table,
causing a crash. The fix is to remove any potential extra arguments
using `lua_settop(L, 2)`.
Also added a few tests for this case. Ref #80.
It returns the resolved path of the symlink.
Original version by Hisham <hisham@gobolinux.org>, modified to
use a different strategy for sizing the readlink() buffer.
About indentation: currently parts of lfs.c use 2 spaces
and parts use 8. It would be nice to slowly switch to one
of styles over some time, as code is being touched here and there.
2 spaces seem preferrable as it's what Lua itself uses.
The pushresult(L, -1, ...) call will delegate to pusherror() anyway,
but this avoids the "Unused static" warning for pushresult.
Also take care of assigning something meaningful to `errno`, as
strerror(errno) is used for constructing the Lua error message.
Fixes#65
Lua 5.2 changed the protocol on how to represent closed files: Lua 5.1
sets the file pointer to NULL, Lua 5.2 sets the close function pointer
to NULL (a NULL file pointer now signals an incompletely constructed
object).
Also `luaL_checkudata` never returns NULL, it raises an error instead
if you have an invalid value (no userdata/not correct userdata type).