about summary refs log tree commit homepage
path: root/ext/raindrops/my_fileno.h
diff options
context:
space:
mode:
authorSamuel Williams <samuel.williams@oriontransfer.co.nz>2023-06-09 19:48:05 +0900
committerEric Wong <bofh@yhbt.net>2023-06-11 20:17:50 +0000
commitb3212417cc3e7cc44aa9e1ffe89b0d62ef3fdab5 (patch)
tree989dc805c36cff204b5f3ef7b33cf5e65c3c4dfb /ext/raindrops/my_fileno.h
parentd843802120e7cb01659b93917c29e3ba014216f1 (diff)
downloadraindrops-b3212417cc3e7cc44aa9e1ffe89b0d62ef3fdab5.tar.gz
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
Diffstat (limited to 'ext/raindrops/my_fileno.h')
-rw-r--r--ext/raindrops/my_fileno.h7
1 files changed, 7 insertions, 0 deletions
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
 }