diff options
Diffstat (limited to 'ext/raindrops/my_fileno.h')
-rw-r--r-- | ext/raindrops/my_fileno.h | 34 |
1 files changed, 7 insertions, 27 deletions
diff --git a/ext/raindrops/my_fileno.h b/ext/raindrops/my_fileno.h index bdf1a5f..3a0100f 100644 --- a/ext/raindrops/my_fileno.h +++ b/ext/raindrops/my_fileno.h @@ -1,36 +1,16 @@ #include <ruby.h> -#ifdef HAVE_RUBY_IO_H -# include <ruby/io.h> -#else -# include <stdio.h> -# include <rubyio.h> -#endif - -#if ! HAVE_RB_IO_T -# define rb_io_t OpenFile -#endif - -#ifdef GetReadFile -# define FPTR_TO_FD(fptr) (fileno(GetReadFile(fptr))) -#else -# if !HAVE_RB_IO_T || (RUBY_VERSION_MAJOR == 1 && RUBY_VERSION_MINOR == 8) -# define FPTR_TO_FD(fptr) fileno(fptr->f) -# else -# define FPTR_TO_FD(fptr) fptr->fd -# endif -#endif +#include <ruby/io.h> +#ifdef HAVE_RB_IO_DESCRIPTOR +# define my_fileno(io) rb_io_descriptor(io) +#else /* Ruby <3.1 */ static int my_fileno(VALUE io) { rb_io_t *fptr; - int fd; - if (TYPE(io) != T_FILE) - io = rb_convert_type(io, T_FILE, "IO", "to_io"); GetOpenFile(io, fptr); - fd = FPTR_TO_FD(fptr); + rb_io_check_closed(fptr); - if (fd < 0) - rb_raise(rb_eIOError, "closed stream"); - return fd; + return fptr->fd; } +#endif /* Ruby <3.1 !HAVE_RB_IO_DESCRIPTOR */ |