diff options
-rw-r--r-- | ext/raindrops/extconf.rb | 1 | ||||
-rw-r--r-- | ext/raindrops/my_fileno.h | 7 |
2 files changed, 8 insertions, 0 deletions
diff --git a/ext/raindrops/extconf.rb b/ext/raindrops/extconf.rb index 792e509..1733703 100644 --- a/ext/raindrops/extconf.rb +++ b/ext/raindrops/extconf.rb @@ -4,6 +4,7 @@ require 'shellwords' dir_config('atomic_ops') have_func('mmap', 'sys/mman.h') or abort 'mmap() not found' have_func('munmap', 'sys/mman.h') or abort 'munmap() not found' +have_func('rb_io_descriptor') $CPPFLAGS += " -D_GNU_SOURCE " have_func('mremap', 'sys/mman.h') diff --git a/ext/raindrops/my_fileno.h b/ext/raindrops/my_fileno.h index 4c8ffba..00c5d29 100644 --- a/ext/raindrops/my_fileno.h +++ b/ext/raindrops/my_fileno.h @@ -3,6 +3,12 @@ static int my_fileno(VALUE io) { +#ifdef HAVE_RB_IO_DESCRIPTOR + if (TYPE(io) != T_FILE) + io = rb_convert_type(io, T_FILE, "IO", "to_io"); + + return rb_io_descriptor(io); +#else rb_io_t *fptr; if (TYPE(io) != T_FILE) @@ -12,4 +18,5 @@ static int my_fileno(VALUE io) if (fptr->fd < 0) rb_raise(rb_eIOError, "closed stream"); return fptr->fd; +#endif } |