diff options
author | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-10-11 13:33:14 +0000 |
---|---|---|
committer | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-10-11 13:33:14 +0000 |
commit | 57bc5eaf2f9b44ad8321fecf6dfa45d82a50c580 (patch) | |
tree | 4a5e3e0cf3656e829ad4c830586e13ec57f92cc3 /io.c | |
parent | 3fedb5128f33390959cfcd97a624b33b0f22f372 (diff) | |
download | ruby-57bc5eaf2f9b44ad8321fecf6dfa45d82a50c580.tar.gz |
Fixes build failures on Portable Native Client.
Note: Some of the fixes are for newlib in general but not NaCl-specific.
* include/ruby/intern.h (rb_fd_select): declare struct timeval, or the
struct gets local to the function in C99.
* file.c (#include): add nacl/stat.h for PNaCl.
(utimes): added a declaration for PNaCl.
(stat_atimespec): stat::st_atimensec is long long but
timespec::tv_nsec is long in PNaCl.
(stat_mtimespec, stat_ctimespec): ditto.
(rb_group_member): disable getgroups unless HAVE_GETGROUPS.
(eaccess): unify the fallback to generic defined(USE_GETEUID).
* io.c: include sys/time.h for struct timeval.
(rb_close_before_exec): nothing we can do if F_GETFD is not
available.
(ioctl): pnacl newlib actually doesn't have ioctl.
* process.c (maxgroups): it is used iff
defined(_SC_NGROUPS_MAX) || defined(NGROUPS_MAX) but not
defined(HAVE_GETGROUPS) || defined(HAVE_SETGROUPS).
(obj2gid): fail unless the object is a Fixnum if getgrnam is not
available.
(disable_child_handler_fork_child): sigaction is not available in
PNaCl newlib.
* configure.in (warnflags, strict_warnflags): avoid -ansi for strlcpy.
(rb_cv_gcc_atomic_builtins): also check
__atomic_or_etch because it is used in ruby_atomic.h.
(rb_cv_gcc_sync_builtins): ditto.
(HAVE_GETGRNAM): added.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47882 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'io.c')
-rw-r--r-- | io.c | 25 |
1 files changed, 20 insertions, 5 deletions
@@ -68,6 +68,10 @@ # define PRI_OFF_T_PREFIX "" #endif +#ifdef HAVE_SYS_TIME_H +# include <sys/time.h> +#endif + #include <sys/stat.h> /* EMX has sys/param.h, but.. */ @@ -127,7 +131,10 @@ off_t __syscall(quad_t number, ...); #endif #ifdef __native_client__ -# undef F_GETFD +# undef F_GETFD +# ifdef NACL_NEWLIB +# undef HAVE_IOCTL +# endif #endif #define IO_RBUF_CAPA_MIN 8192 @@ -5866,19 +5873,20 @@ linux_get_maxfd(void) void rb_close_before_exec(int lowfd, int maxhint, VALUE noclose_fds) { +#if defined(HAVE_FCNTL) && defined(F_GETFD) && defined(F_SETFD) && defined(FD_CLOEXEC) int fd, ret; int max = (int)max_file_descriptor; -#ifdef F_MAXFD +# ifdef F_MAXFD /* F_MAXFD is available since NetBSD 2.0. */ ret = fcntl(0, F_MAXFD); /* async-signal-safe */ if (ret != -1) maxhint = max = ret; -#elif defined(__linux__) +# elif defined(__linux__) ret = linux_get_maxfd(); if (maxhint < ret) maxhint = ret; /* maxhint = max = ret; if (ret == -1) abort(); // test */ -#endif +# endif if (max < maxhint) max = maxhint; for (fd = lowfd; fd <= max; fd++) { @@ -5889,12 +5897,13 @@ rb_close_before_exec(int lowfd, int maxhint, VALUE noclose_fds) if (ret != -1 && !(ret & FD_CLOEXEC)) { fcntl(fd, F_SETFD, ret|FD_CLOEXEC); /* async-signal-safe */ } -#define CONTIGUOUS_CLOSED_FDS 20 +# define CONTIGUOUS_CLOSED_FDS 20 if (ret != -1) { if (max < fd + CONTIGUOUS_CLOSED_FDS) max = fd + CONTIGUOUS_CLOSED_FDS; } } +#endif } static int @@ -8864,6 +8873,7 @@ rb_f_select(int argc, VALUE *argv, VALUE obj) # define NUM2IOCTLREQ(num) NUM2INT(num) #endif +#ifdef HAVE_IOCTL struct ioctl_arg { int fd; ioctl_req_t cmd; @@ -8892,6 +8902,7 @@ do_ioctl(int fd, ioctl_req_t cmd, long narg) return retval; } +#endif #define DEFULT_IOCTL_NARG_LEN (256) @@ -9125,6 +9136,7 @@ setup_narg(ioctl_req_t cmd, VALUE *argp, int io_p) return narg; } +#ifdef HAVE_IOCTL static VALUE rb_ioctl(VALUE io, VALUE req, VALUE arg) { @@ -9168,6 +9180,9 @@ rb_io_ioctl(int argc, VALUE *argv, VALUE io) rb_scan_args(argc, argv, "11", &req, &arg); return rb_ioctl(io, req, arg); } +#else +#define rb_io_ioctl rb_f_notimplement +#endif #ifdef HAVE_FCNTL struct fcntl_arg { |