Bug #1755
closedIO#reopen Doesn't Fully Associate with Given Stream on 1.9; Ignores pos on 1.8
Description
=begin
$ cat io-reopen.rb
file1 = File.open('a')
file2 = File.open('b')
file1.gets # => "ant\n"
file2.gets # => "1\n"
file1.reopen(file2)
p file1.gets # => "2\n"
$ echo -e "ant\nbear\ncroc" >a
$ echo -e "1\n2\n3" >b
$ ruby -v io-reopen2.rb
ruby 1.9.2dev (2009-07-08 trunk 23995) [i686-linux]
"bear\n"
I have nothing against bears, but in this instance suspect 2 would be more appropriate. However, if we call file.pos
before the #reopen, it works:
$ cat io-reopen.rb
file1 = File.open('a')
file2 = File.open('b')
file1.gets # => "ant\n"
file2.gets # => "1\n"
file1.pos # <--- Vital
file1.reopen(file2)
p file1.gets # => "2\n"
$ ruby -v io-reopen2.rb
ruby 1.9.2dev (2009-07-08 trunk 23995) [i686-linux]
"2\n"
Note that 1.8 prints nil in both cases because #reopen doesn't copy across the position. We must manually set file1.pos to file2.pos.
$ cat io-reopen.rb
file1 = File.open('a')
file2 = File.open('b')
file1.gets # => "ant\n"
file2.gets # => "1\n"
file1.reopen(file2)
file1.pos = file2.pos # <-- 1.8 doesn't copy across the pos
p file1.gets # => "2\n"
$ ruby8 -v io-reopen2.rb
ruby 1.8.8dev (2009-07-01) [i686-linux]
"2\n"
=end