diff options
author | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-05-12 10:05:48 +0000 |
---|---|---|
committer | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-05-12 10:05:48 +0000 |
commit | d7fd18fed79410ae6c66ae353e0ea1fce8cedd9d (patch) | |
tree | 36edf02dccffce28b78be8c098c0da6113f9bd47 | |
parent | b01602bffa1ce5f2a239426da9d588e3ea4a398c (diff) | |
download | ruby-d7fd18fed79410ae6c66ae353e0ea1fce8cedd9d.tar.gz |
Support bulding the extension on Windows
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58682 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | spec/rubyspec/optional/capi/ext/io_spec.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/spec/rubyspec/optional/capi/ext/io_spec.c b/spec/rubyspec/optional/capi/ext/io_spec.c index 982284deab..91d86f5827 100644 --- a/spec/rubyspec/optional/capi/ext/io_spec.c +++ b/spec/rubyspec/optional/capi/ext/io_spec.c @@ -2,7 +2,9 @@ #include "rubyspec.h" #include "ruby/io.h" #include <fcntl.h> +#if HAVE_UNISTD_H #include <unistd.h> +#endif #ifdef __cplusplus extern "C" { @@ -10,13 +12,16 @@ extern "C" { static int set_non_blocking(int fd) { int flags; -#if defined(O_NONBLOCK) +#if defined(O_NONBLOCK) && defined(F_GETFL) if (-1 == (flags = fcntl(fd, F_GETFL, 0))) flags = 0; return fcntl(fd, F_SETFL, flags | O_NONBLOCK); -#else +#elif defined(FIOBIO) flags = 1; return ioctl(fd, FIOBIO, &flags); +#else + errno = ENOSYS; + return -1; #endif } @@ -139,7 +144,8 @@ VALUE io_spec_rb_io_wait_readable(VALUE self, VALUE io, VALUE read_p) { char buf[RB_IO_WAIT_READABLE_BUF]; wait_bool ret; - set_non_blocking(fd); + if (set_non_blocking(fd) == -1) + rb_sys_fail(0); if(RTEST(read_p)) { rb_ivar_set(self, rb_intern("@write_data"), Qtrue); |