Project

General

Profile

Actions

Bug #1755

closed

IO#reopen Doesn't Fully Associate with Given Stream on 1.9; Ignores pos on 1.8

Added by runpaint (Run Paint Run Run) over 15 years ago. Updated over 13 years ago.

Status:
Closed
Target version:
ruby -v:
ruby 1.9.2dev (2009-07-08 trunk 23995) [i686-linux]
Backport:
[ruby-core:24240]

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

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0