hGetBuf sometimes reads fewer bytes than required
The attached program repeatedly calls
hGetBuf and prints how much it wanted to read and how many bytes
hGetBuf returned. It should be run on a sufficiently large file. On Cygwin, the last 4 lines of the output are:
4 4 608 523 4 4 300 300
Note that we requested 608 bytes but
hGetBuf only returned 523 even though we weren't at the end of file (since subsequent reads succeeded).
I suspect the bug is in
GHC.IO.Handle.Text.bufReadEmpty, namely here:
loop :: FD -> Int -> Int -> IO Int loop fd off bytes | bytes <= 0 = return off
It should probably return
so_far + off.