From: Tanaka Akira Date: 2003-12-24T00:18:37+09:00 Subject: [ruby-dev:22350] Re: yet another inconsistency about EOF between StringIO and IO In article <200312231455.hBNEtJkM012849@sharui.nakada.kanuma.tochigi.jp>, nobu.nakada@nifty.ne.jp writes: > StringIO側でまずい動作はどの部分なんでしょうか。どういう条件で > どういう動作をすべきかがよく分かってないのですが、例えばテスト > ケースなどがあればできなくはないと思います。 要するにファイル位置がファイルサイズ以上の場合の read(nil) は常に "" を返すということなので、例えばこんな感じかなぁ。 なお、StringIO は read(length, buf) という形式をサポートしていないこと に気がついてしまいました。うぅむ。 Index: ext/stringio/stringio.c =================================================================== RCS file: /src/ruby/ext/stringio/stringio.c,v retrieving revision 1.24 diff -u -r1.24 stringio.c --- ext/stringio/stringio.c 10 Dec 2003 10:29:00 -0000 1.24 +++ ext/stringio/stringio.c 23 Dec 2003 15:11:18 -0000 @@ -859,8 +859,8 @@ olen = -1; len = RSTRING(ptr->string)->len; if (len <= ptr->pos) { - if (ptr->flags & STRIO_EOF) return Qnil; - len = 0; + ptr->flags |= STRIO_EOF; + return rb_str_new(0, 0); } else { len -= ptr->pos; -- [田中 哲][たなか あきら][Tanaka Akira]