Hi all,
For some reason, reading in an entire file, for example with simple
test code like this, doesn't appear read the whole file:
local file = io.open("infile", "r");
if(file) then
local data = file:read("*a"); -- i've also tried "*all" as
described in PIL
file:close();
file = io.open("outfile", "w");
if(file) then
file:write(data);
file:close();
end
end
So far, I have used lua in a couple of projects but never noticed
this problem before, although I'm not sure that I've actually used
this specific functionality before. When the data is dumpwritten to
a new file, it is way too small. Writing string.len(data) to the
output file instead, also shows this same (too small) size, so that
would indicate the problem is either in reading the file, or simply
in determining the length of the resulting string in memory (be it
in the call to file:write or to string.len). But the latter doesn't
seem likely as lua keeps explicit record of the length of a string,
so I suspect the problem is somewhere in reading the file.
The file where the data is written to does contain the actual data
of the file that was read, it just seems to be truncated (one
example case was a 500KB file being read and resulting in a 9KB
file, approximately). The resulting output file size is consistent
between runs for the same input file, but it's different for
different input files.
I'm using lua 5.0.2 and compile it into static libraries, and
include the luasocket and luafilesystem libraries into the build,
also static. My app is single-threaded and I link everything to the
single-threaded static run-time. So, everything is statically
linked and I end up with one big self-sufficient executable. I
don't use any funny compiler options (as far as I know, I just made
my own project from the VC6 IDE and set optimisations either to
maximize speed or minimize size). I still need to do a debug build
of the library and trace through the code to track down the exact
location of the problem, but I was wondering if anyone might have
had this problem before, or might know a likely cause.
Thanks,
Mark