なかだです。

At Wed, 10 Dec 2003 15:49:51 +0900,
Tanaka Akira wrote:
> どちらをどちらに合わせるべきかという点に関しては、StringIO のような挙
> 動を IO にさせるには read(2) だけではできないので、StringIO を IO にあ
> わせるほうが良いと思います。

確かに。


Index: ext/stringio/stringio.c =================================================================== RCS file: /cvs/ruby/src/ruby/ext/stringio/stringio.c,v retrieving revision 1.21 diff -u -2 -p -d -r1.21 stringio.c --- ext/stringio/stringio.c 5 Dec 2003 02:54:48 -0000 1.21 +++ ext/stringio/stringio.c 10 Dec 2003 07:24:24 -0000 @@ -868,4 +868,5 @@ strio_read(argc, argv, self) str = rb_str_substr(ptr->string, ptr->pos, len); if (NIL_P(str)) { + if (!(ptr->flags & STRIO_EOF)) str = rb_str_new(0, 0); ptr->flags |= STRIO_EOF; } Index: test/ruby/test_file.rb =================================================================== RCS file: /cvs/ruby/src/ruby/test/ruby/test_file.rb,v retrieving revision 1.4 diff -u -2 -p -d -r1.4 test_file.rb --- test/ruby/test_file.rb 9 Dec 2003 05:33:32 -0000 1.4 +++ test/ruby/test_file.rb 10 Dec 2003 07:15:57 -0000 @@ -42,3 +42,5 @@ class TestFile < Test::Unit::TestCase end alias open_file_rw open_file + + include TestEOF::Seek end Index: test/ruby/ut_eof.rb =================================================================== RCS file: /cvs/ruby/src/ruby/test/ruby/ut_eof.rb,v retrieving revision 1.2 diff -u -2 -p -d -r1.2 ut_eof.rb --- test/ruby/ut_eof.rb 9 Dec 2003 05:33:32 -0000 1.2 +++ test/ruby/ut_eof.rb 10 Dec 2003 07:22:51 -0000 @@ -54,3 +54,30 @@ module TestEOF } end + + module Seek + def open_file_seek(content, pos) + open_file(content) do |f| + f.seek(pos) + yield f + end + end + + def test_eof_0_seek + open_file_seek("", 10) {|f| + assert_equal("", f.read) + assert_equal(nil, f.read) + } + end + + def test_eof_1_seek + open_file_seek("a", 10) {|f| + assert_equal("", f.read) + assert_equal(nil, f.read) + } + open_file_seek("a", 1) {|f| + assert_equal("", f.read) + assert_equal(nil, f.read) + } + end + end end Index: test/stringio/test_stringio.rb =================================================================== RCS file: /cvs/ruby/src/ruby/test/stringio/test_stringio.rb,v retrieving revision 1.3 diff -u -2 -p -d -r1.3 test_stringio.rb --- test/stringio/test_stringio.rb 9 Dec 2003 05:35:16 -0000 1.3 +++ test/stringio/test_stringio.rb 10 Dec 2003 07:16:14 -0000 @@ -13,3 +13,5 @@ class TestStringIO < Test::Unit::TestCas end alias open_file_rw open_file + + include TestEOF::Seek end
-- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦