わたなべです。

WATANABE Hirofumi <eban / os.rim.or.jp> writes:

> _fmodeで設定してもは普通のファイルに対して効かないようです。
> 
> % ruby -e 'open("foo.txt", "w").print "foo\n"'     
> % od -c foo.txt
> 0000000   f   o   o  \r  \n
> 0000005

_fmodeの設定をmain.cに移したら効きました。
DLLの中では意味がないということで。

結局automode.cを参考に

#ifdef __CYGWIN__ 
#include <sys/cygwin.h>
    static struct __cygwin_perfile pf[] =
    {
        {"", O_RDONLY | O_BINARY},
        {"", O_WRONLY | O_BINARY},
        {"", O_RDWR | O_BINARY},
        {"", O_APPEND | O_BINARY},
        {NULL, 0}
    };
    cygwin_internal(CW_PERFILE, pf);
#endif

とすればよさそうです。

> readのほうはちゃんとバイナリモードになってるんだけど。
> 
> % ruby -ne 'p $_' <foo.txt
> "foo\r\n"
> % ruby -ne 'p $_' foo.txt 
> "foo\r\n"
> 
> なんか変なのでもうちょっと調べてみます。

こちらはprep_stdio()のおかげでした。

以上の変更をcommitしました。

-- 
わたなべひろふみ