[ruby-dev:46833] Re: [ruby-changes:26632] yugui:r38683 (trunk): * io.c (rb_cloexec_fcntl_dupfd): Fix failures in

From: KOSAKI Motohiro <kosaki.motohiro@...>
Date: 2013-01-04 21:15:47 UTC
List: ruby-dev #46833
ruby-devにお引越し

Yuguiさん、

> --- io.c        (revision 38682)
> +++ io.c        (revision 38683)
> @@ -298,7 +298,7 @@ rb_cloexec_fcntl_dupfd(int fd, int minfd https://github.com/ruby/ruby/blob/trunk/io.c#L298
>  {
>      int ret;
>
> -#if defined(HAVE_FCNTL) && defined(F_DUPFD_CLOEXEC)
> +#if defined(HAVE_FCNTL) && defined(F_DUPFD_CLOEXEC) && !defined(__native_client__)

これって

#if defined(HAVE_FCNTL) && defined(F_DUPFD_CLOEXEC) &&
 defined(F_DUPFD)

とは書けないんですか? 書けないとしたらNaCl を直すべきではないでしょうか。
*.c に !defined(__native_client__)  が増えていくのはあまり感心しません。


>      static int try_dupfd_cloexec = 1;
>      if (try_dupfd_cloexec) {
>          ret = fcntl(fd, F_DUPFD_CLOEXEC, minfd);
> @@ -318,8 +318,10 @@ rb_cloexec_fcntl_dupfd(int fd, int minfd https://github.com/ruby/ruby/blob/trunk/io.c#L318
>      else {
>          ret = fcntl(fd, F_DUPFD, minfd);
>      }
> -#else
> +#elif defined(HAVE_FCNTL) && !defined(__native_client__)
>      ret = fcntl(fd, F_DUPFD, minfd);
> +#else
> +    ret = dup2(fd, minfd);
>  #endif

あと、ここも

#elif defined(HAVE_DUP2)
    ret = dup2(fd, minfd);
#elif defined(HAVE_FCNTL) && defined(F_DUPFD)
     ret = fcntl(fd, F_DUPFD, minfd);
#else
  #error "dup2() or fcntl(F_DUPFD) must be supported."
#endif

とでもすれば、NaCl 決め打ちの ifdef が消せるのではないでしょうか

In This Thread

Prev Next