From: "H.Yamamoto" Date: 2005-11-11T19:37:51+09:00 Subject: [ruby-dev:27686] Re: patch for BeOS (HEAD) 山本です。 >> BeOS で HEAD の make が通らなくなっていたのでパッチを作りました。 >> >> * BeOS では NFDBITS は定義されているが、fd_mask と howmany が >> 定義されていない。 > >!defined(__BEOS__) よりも defined(howmany) ではどうでしょうか。 >howmany()はコンパイル時定数になるはずなので、マクロのはずです。 > >> >> * BeOS ではファイルディスクリプタとソケットディスクリプタが >> 統合されていないためか、IS_SOCK がない。 > >file.c:test_SのようにS_ISSOCK()の有無でみればいいのでは。 わかりました、そうします。 Index: eval.c =================================================================== RCS file: /src/ruby/eval.c,v retrieving revision 1.844 diff -u -r1.844 eval.c --- eval.c 8 Nov 2005 08:49:45 -0000 1.844 +++ eval.c 11 Nov 2005 10:21:50 -0000 @@ -9546,7 +9546,7 @@ # endif #endif -#ifdef NFDBITS +#if defined(NFDBITS) && defined(howmany) void rb_fd_init(fds) volatile rb_fdset_t *fds; Index: intern.h =================================================================== RCS file: /src/ruby/intern.h,v retrieving revision 1.189 diff -u -r1.189 intern.h --- intern.h 8 Nov 2005 08:49:45 -0000 1.189 +++ intern.h 11 Nov 2005 10:21:50 -0000 @@ -161,7 +161,7 @@ NORETURN(void rb_error_frozen(const char*)); void rb_check_frozen(VALUE); /* eval.c */ -#ifdef NFDBITS +#if defined(NFDBITS) && defined(howmany) typedef struct { int maxfd; fd_set *fdset; Index: io.c =================================================================== RCS file: /src/ruby/io.c,v retrieving revision 1.392 diff -u -r1.392 io.c --- io.c 24 Oct 2005 12:15:13 -0000 1.392 +++ io.c 11 Nov 2005 10:21:52 -0000 @@ -168,14 +168,12 @@ #if defined(_WIN32) #define is_socket(fd, path) rb_w32_is_socket(fd) -#elif defined(__DJGPP__) +#elif !defined(S_ISSOCK) #define is_socket(fd, path) 0 #define shutdown(a,b) 0 #else static int -is_socket(fd, path) - int fd; - const char *path; +is_socket(int fd, const char *path) { struct stat sbuf; if (fstat(fd, &sbuf) < 0) @@ -2817,7 +2815,7 @@ int pid = 0; OpenFile *fptr; VALUE port, prog; -#if defined(HAVE_FORK) +#if defined(HAVE_FORK) && defined(HAVE_SOCKETPAIR) int status; struct popen_arg arg; volatile int doexec; @@ -2835,7 +2833,7 @@ prog = argv[0]; } -#if defined(HAVE_FORK) +#if defined(HAVE_FORK) && defined(HAVE_SOCKETPAIR) cmd = StringValueCStr(prog); doexec = (strcmp("-", cmd) != 0); if (!doexec) {