なかだです。

At Wed, 7 Jan 2004 23:43:02 +0900,
MIYAMUKO Katsuyuki wrote:
> > そのときのerrnoは何でしたか。
> 
> write(2) が -1 を返したときに errno を表示するようにして実行しました。
> test/drb の実行で errno=11 が表示されたのは test_05_toolarge_ary
> だけです。
> 
> % ./ruby19 test/runner.rb -v -a test/drb
>   :
> test_05_too_large_ary(TestDRbLarge): write: errno=11
> write: errno=32
> .
>   :
> 
> errno の値は以下の通りです。
> 
> #define EAGAIN          11      /* No more processes            */
> #define EPIPE           32      /* Broken pipe                  */

fwrite(3)を使うとEAGAINがセットされないということでしょうか。む
ちゃくちゃad hocですが、これだとどうでしょう。

というか、HP-UXのバグとしてHPに報告すべきような気もしますが。


Index: io.c =================================================================== RCS file: /cvs/ruby/src/ruby/io.c,v retrieving revision 1.255 diff -u -2 -p -r1.255 io.c --- io.c 6 Jan 2004 12:51:40 -0000 1.255 +++ io.c 7 Jan 2004 15:03:45 -0000 @@ -395,6 +395,9 @@ rb_io_fwrite(ptr, len, f) } while (--n > 0); #else - while (ptr += (r = fwrite(ptr, 1, n, f)), (n -= r) > 0) { + while (errno = 0, ptr += (r = fwrite(ptr, 1, n, f)), (n -= r) > 0) { if (ferror(f)) { +#ifdef __hpux + if (!errno) errno = EAGAIN; +#endif if (rb_io_wait_writable(fileno(f))) { clearerr(f);
-- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦