From: KOSAKI Motohiro Date: 2010-02-26T22:06:54+09:00 Subject: [ruby-dev:40496] Re: [Bug:trunk] readpartial after ungetc fails with text mode 2010年2月26日20:19 Yusuke ENDOH : > 遠藤です。 > > 2010年2月26日19:42 Tanaka Akira : >> 2010年2月26日19:34 Yusuke ENDOH : >> >>> 1. text mode だと ungetc が rbuf でなく cbuf に記録する >>> 2. readpartial は rbuf しか見ない >>> >>> readpartial が cbuf も見るべきなんですかね。 >> >> いいえ。 >> >> cbuf は文字コード変換済みのデータを貯めておく場所であり、 >> readpartial は変換前のバイト列を読み出すメソッドなので、 >> cbuf を読まないのは正しい動作です。 > > > うう、1.9 の IO は本当に難しいですね。 > > IO#readpartial と ungetc の rdoc をぱっと見ても "buffer" の種類が > 複数あるとは読み取れなかったのですが、どこかに書いてあることですか? > バッファリングしているとかユーザが気にしなくてもいいようにならない > ものかなあ。 この問題が表面化するのはungetc()だけなので、バッファが2つあるという実装を書く必要はなくて ungetc()のメソッドの説明にバイナリ読み込みと組み合わせたら結果は不定だよ。と 追記すれば済む話ではないかなぁ 現実世界で、そういう要望はこなさそうだし。 > > とりあえず、RubySpec 側で pipe を binmode にしてしのぎます。