From b3212417cc3e7cc44aa9e1ffe89b0d62ef3fdab5 Mon Sep 17 00:00:00 2001 From: Samuel Williams Date: Fri, 9 Jun 2023 19:48:05 +0900 Subject: Improve compatibility with Ruby 3.3+ Prefer to use `rb_io_descriptor` in my_fileno if it is available. This function was introduced in Ruby 3.1. Ruby 3.3 will deprecate access to all internal fields of `rb_io_t`. This change is necessary for compatibility with the current ruby.git master: https://bugs.ruby-lang.org/issues/19057#note-17 --- ext/raindrops/my_fileno.h | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'ext/raindrops/my_fileno.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 } -- cgit v1.2.3-24-ge0c7