Bug #6285
closedDocuments of IO#read, IO#readpartial, etc. should describe how they are executed when second argument is not empty String
Description
IO#read, IO#readpartial, IO#read_nonblock, and IO#sysread methods can receive a String object as second argument ((|outbuf|)). If it is present, it will receive the data. This is documented.
So, when I pass the empty String object to the method, it is expected that the object contains the data after the method is executed.
r,w = IO.pipe
w << 'abcd'
w.close
r.read( 4, buf = '' )
buf #=> 'abcd'
However, when I pass the not empty String object to the method as second argument, what happen?
r,w = IO.pipe
w << 'abcd'
w.close
r.read( 4, buf = '012345' )
buf #=> 'abcd'? or 'abcd45'? or '012345abcd'?
In current implementation, the ((|outbuf|)) contain only the received data after the method is executed even though it is not empty at the beginning. I think it should be documented.
The same applies to ARGF.read, ARGF.readpartial, StringIO#read, StringIO#readpartial, StringIO#sysread, StringIO#read_nonblock methods.
I wrote documents and tests. Please see attached file.
Files