From bdc85361e48340b4f9d6b1039a8c338a2cb64138 Mon Sep 17 00:00:00 2001 From: usa Date: Mon, 31 Oct 2011 01:52:21 +0000 Subject: * io.c (rb_cloexec_fcntl_dupfd): this function needs F_DUPFD. * io.c (nogvl_io_cntl): use rb_cloexec_fcntl_dupfd() only if the platform has F_DUPFD. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33578 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- io.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'io.c') diff --git a/io.c b/io.c index 7d31dce478..04057b3b8b 100644 --- a/io.c +++ b/io.c @@ -302,11 +302,15 @@ rb_cloexec_pipe(int fildes[2]) int rb_cloexec_fcntl_dupfd(int fd, int minfd) { +#if defined(F_DUPFD) int ret; ret = fcntl(fd, F_DUPFD, minfd); if (ret == -1) return -1; fd_set_cloexec(ret); return ret; +#else + return -1; +#endif } #define argf_of(obj) (*(struct argf *)DATA_PTR(obj)) @@ -7831,9 +7835,11 @@ static VALUE nogvl_io_cntl(void *ptr) if (arg->io_p) return (VALUE)ioctl(arg->fd, arg->cmd, arg->narg); else +#if defined(F_DUPFD) if (arg->cmd == F_DUPFD) return (VALUE)rb_cloexec_fcntl_dupfd(arg->fd, arg->narg); else +#endif return (VALUE)fcntl(arg->fd, arg->cmd, arg->narg); } -- cgit v1.2.3