diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | ext/stringio/stringio.c | 4 | ||||
-rw-r--r-- | test/stringio/test_stringio.rb | 15 |
3 files changed, 23 insertions, 2 deletions
@@ -1,13 +1,15 @@ -Tue Nov 18 18:09:37 2003 Nobuyoshi Nakada <nobu@ruby-lang.org> +Tue Nov 18 18:23:05 2003 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp> * ext/stringio/stringio.c (strio_read): behave as IO at empty string. - [ruby-dev:21939] + [ruby-dev:21939], [ruby-dev:21941] * ext/stringio/stringio.c (strio_getc, strio_getline): set EOF flag. * ext/stringio/stringio.c (strio_rewind, strio_seek, strio_ungetc): clear EOF flag. + * test/stringio/test_stringio.rb: imported from [ruby-dev:21941]. + Tue Nov 18 14:06:35 2003 Minero Aoki <aamine@loveruby.net> * lib/fileutils.rb (fu_each_src_dest): raise if src==dest. diff --git a/ext/stringio/stringio.c b/ext/stringio/stringio.c index d6d5b7694a..0fb60069de 100644 --- a/ext/stringio/stringio.c +++ b/ext/stringio/stringio.c @@ -849,6 +849,9 @@ strio_read(argc, argv, self) ptr->flags |= STRIO_EOF; return Qnil; } + else if (ptr->flags & STRIO_EOF) { + return Qnil; + } break; } /* fall through */ @@ -856,6 +859,7 @@ strio_read(argc, argv, self) len = RSTRING(ptr->string)->len - ptr->pos; if (len == 0 && ptr->pos == RSTRING(ptr->string)->len) { if (ptr->flags & STRIO_EOF) return Qnil; + ptr->flags |= STRIO_EOF; } break; default: diff --git a/test/stringio/test_stringio.rb b/test/stringio/test_stringio.rb new file mode 100644 index 0000000000..10390fc6da --- /dev/null +++ b/test/stringio/test_stringio.rb @@ -0,0 +1,15 @@ +require 'test/unit' +require 'stringio' + +class TestStringIO < Test::Unit::TestCase + def test_empty_file + f = StringIO.new("") + assert_equal("", f.read(0)) + assert_equal("", f.read) + assert_equal(nil, f.read(0)) + f = StringIO.new("") + assert_equal(nil, f.read(1)) + assert_equal(nil, f.read) + assert_equal(nil, f.read(1)) + end +end |