From ad98dd2c24f5a09596ecaefaa8a330d2d433ca72 Mon Sep 17 00:00:00 2001 From: akr Date: Sat, 31 Jan 2009 07:07:21 +0000 Subject: [PATCH] * io.c (io_getpartial): fflush after read for updating pos in FILE. not portable, I guess. [ruby-core:21561] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@21913 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ io.c | 2 ++ test/ruby/test_io.rb | 20 ++++++++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/ChangeLog b/ChangeLog index 991eb65119..65288ef9ec 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Sat Jan 31 16:04:38 2009 Tanaka Akira + + * io.c (io_getpartial): fflush after read for updating pos in FILE. + not portable, I guess. [ruby-core:21561] + Fri Jan 30 15:41:51 2009 Akinori MUSHA * proc.c (Init_Proc): add '===' operator to use procs in when diff --git a/io.c b/io.c index 4635bd92f1..ae683ce980 100644 --- a/io.c +++ b/io.c @@ -1285,6 +1285,8 @@ io_getpartial(int argc, VALUE *argv, VALUE io, int nonblock) goto again; rb_sys_fail(fptr->path); } + if (fptr->f) /* update pos in FILE structure [ruby-core:21561] */ + fflush(fptr->f); } rb_str_resize(str, n); diff --git a/test/ruby/test_io.rb b/test/ruby/test_io.rb index 642c8f4430..19b4f0ebf6 100644 --- a/test/ruby/test_io.rb +++ b/test/ruby/test_io.rb @@ -1,6 +1,15 @@ require 'test/unit' +require 'tmpdir' class TestIO < Test::Unit::TestCase + def mkcdtmpdir + Dir.mktmpdir {|d| + Dir.chdir(d) { + yield + } + } + end + def test_gets_rs r, w = IO.pipe w.print "\377xyz" @@ -8,4 +17,15 @@ class TestIO < Test::Unit::TestCase assert_equal("\377", r.gets("\377"), "[ruby-dev:24460]") r.close end + + def test_readpartial_pos + mkcdtmpdir { + open("foo", "w") {|f| f << "abc" } + open("foo") {|f| + f.seek(0) + assert_equal("ab", f.readpartial(2)) + assert_equal(2, f.pos) + } + } + end end