こんにちは、なかむら(う)です。

しばらく前から、mswin32版でtest/scanf/test_scanf.rbが
  [BUG] rb_sys_fail(iotest.dat) - errno == 0
で落ちてしまうのでいろいろ調べていましたが、ANSI(ISO/JIS) Cの
範囲においては、

(1) lib/scanf.rb内のIO#soak_up_spacesで、パターンによっては複
    数回ungetc(3)が呼び出されるが、そもそも間にfseek,fsetpos,
    rewideを挟まずに複数回ungetcを呼び出した場合は成功するこ
    とは保証されておらず、
(2) また、ungetc(3)がerrnoをセットするという規定はない(しても
    いいけどする必要はない)

というわけで、scanf.rbのIO#soak_up_spacesがこのままでいいかど
うか、という問題と、io.cのrb_io_ungetcの中でrb_sys_failを呼ん
でいる部分をどうするか、という問題があります。

(1)については、SUSv3では読み込みを挟むだけでよいようなので、
「そんな処理系が悪いからporterがなんとかせい」でもいいかもし
れません。
(2)はSUSv3でも規定はないので、どうにかしないといけないと思わ
れます。


それでは。
-- 
U.Nakamura <usa / garbagecollect.jp>