[erlang-bugs] A bug in file:pread or not?

Christian <>
Mon Dec 29 01:31:18 CET 2008


Sending a LocNum to file:pread/2 where the Size is zero returns eof
rather than an empty binary.

2> {ok, File} = file:open("transpose.erl", [binary, read, raw]).
{ok,{file_descriptor,prim_file,{#Port<0.93>,7}}}
3> file:pread(File, []).
{ok,[]}
4> file:pread(File, [{10,10}]).
{ok,[<<"ranspose).">>]}
5> file:pread(File, [{10,1}]).
{ok,[<<"r">>]}
6> file:pread(File, [{10,0}]).
{ok,[eof]}

If I do:

8> file:pread(File, [{10, 10}, {10, 1}, {10,0}]).
{ok,[<<"ranspose).">>,<<"r">>,eof]}

Then I see this syscalls being performed using 'strace':

pread64(7, "ranspose).", 10, 10)        = 10
pread64(7, "r", 1, 10)                  = 1
pread64(7, "", 0, 10)                   = 0

So it looks like the syscall tell you that zero bytes were read. It is
just reported as having tried to read outside the file.



More information about the erlang-bugs mailing list