From: nobu.nakada@... Date: 2004-01-08T00:05:04+09:00 Subject: [ruby-dev:22545] Re: ruby-1.8.1 build failed on HP-UX 11.11 なかだです。 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はできる。 中田 伸悦