From: "H.Yamamoto" Date: 2004-06-21T15:26:09+09:00 Subject: [ruby-dev:23734] Re: error at TestDRbMServer (test/drb) 山本です。 nobu.nakada@nifty.ne.jp wrote: (2004/06/21 14:09) >たぶん、こんな風なことじゃないかと思います。 > >#ifdef __BORLANDC__ >#undef fdopen > >FILE * >rb_w32_fdopen(int fd, const char *mode) >{ > FILE *fp; > int e = errno; > > errno = 0; > if (!(fp = fdopen(fd, mode)) && (errno == 0)) { > if (_get_osfhandle(fd) == INVALID_HANDLE_VALUE) { > e = EBADF; > } > else { > e = EMFILE; > } > } > errno = e; > return fp; >} >#endif mode 文字列が想定外のときとか、malloc が失敗したときとか、そういった場合にも errno を設定せずに NULL を返すようになってるので、EMFILE かどうか判定するには、 どうしても FILE 配列が一杯かどうか、直接調べる必要があると思います。 FILE 配列自体は stdio.h(130) で export されていたのですが、問題はロックする関数が 公開されていないということです。 >> たぶん、内部実装に依存したコードはライセンス違反なんじゃないかと・・・ > >バグ回避のコードをライセンスで禁止できるとは思えないんですが、 >具体的にどういう条項に引っかかりそうなんでしょうか。 具体的にどの条項、というのはわかりませんが、ランタイムのソースは Pro 以上のユーザしか 閲覧できないので、内部的に宣言され使用されている関数を public に使用してはいけない 気がしていました。news://borland.public.cppbuilder.non-technical で聞いてみます。 C++Builder5 のライセンスを http://www.ccsnet.ne.jp/~ocean/23734/LICENSE.txt においておきます。