Skip to content

Commit 273ca95

Browse files
k0kubunioquatix
andauthored
Support Ruby 3.3 (#79)
Co-authored-by: Samuel Williams <[email protected]>
1 parent 6956af8 commit 273ca95

File tree

5 files changed

+28
-11
lines changed

5 files changed

+28
-11
lines changed

.github/workflows/test.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ jobs:
2424
- "3.0"
2525
- "3.1"
2626
- "3.2"
27-
# - "head"
27+
- "head"
2828

2929
experimental: [false]
3030

ext/cool.io/extconf.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
$defs << "-DRUBY_VERSION_CODE=#{RUBY_VERSION.gsub(/\D/, '')}"
66

7+
have_func('rb_io_descriptor')
78
have_func('rb_thread_blocking_region')
89
have_func('rb_thread_call_without_gvl')
910
have_func('rb_thread_alone')

ext/cool.io/iowatcher.c

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,6 @@ static VALUE Coolio_IOWatcher_initialize(int argc, VALUE *argv, VALUE self)
6565
char *flags_str;
6666
int events;
6767
struct Coolio_Watcher *watcher_data;
68-
#if HAVE_RB_IO_T
69-
rb_io_t *fptr;
70-
#else
71-
OpenFile *fptr;
72-
#endif
7368

7469
rb_scan_args(argc, argv, "11", &io, &flags);
7570

@@ -88,10 +83,20 @@ static VALUE Coolio_IOWatcher_initialize(int argc, VALUE *argv, VALUE self)
8883
rb_raise(rb_eArgError, "invalid event type: '%s' (must be 'r', 'w', or 'rw')", flags_str);
8984

9085
Data_Get_Struct(self, struct Coolio_Watcher, watcher_data);
91-
GetOpenFile(rb_convert_type(io, T_FILE, "IO", "to_io"), fptr);
86+
io = rb_convert_type(io, T_FILE, "IO", "to_io");
9287

9388
watcher_data->dispatch_callback = Coolio_IOWatcher_dispatch_callback;
89+
#ifdef HAVE_RB_IO_DESCRIPTOR
90+
ev_io_init(&watcher_data->event_types.ev_io, Coolio_IOWatcher_libev_callback, rb_io_descriptor(io), events);
91+
#else
92+
#if defined(HAVE_RB_IO_T)
93+
rb_io_t *fptr;
94+
#else
95+
OpenFile *fptr;
96+
#endif
97+
GetOpenFile(io, fptr);
9498
ev_io_init(&watcher_data->event_types.ev_io, Coolio_IOWatcher_libev_callback, FPTR_TO_FD(fptr), events);
99+
#endif
95100
watcher_data->event_types.ev_io.data = (void *)self;
96101

97102
return Qnil;

ext/iobuffer/extconf.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
require 'mkmf'
22

33
dir_config("iobuffer")
4+
have_func("rb_io_descriptor")
45
have_library("c", "main")
56
if have_macro("HAVE_RB_IO_T", "ruby/io.h")
67
have_struct_member("rb_io_t", "fd", "ruby/io.h")

ext/iobuffer/iobuffer.c

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -378,17 +378,22 @@ IO_Buffer_read_from(VALUE self, VALUE io)
378378
{
379379
struct buffer *buf;
380380
int ret;
381-
#if HAVE_RB_IO_T
381+
#if defined(HAVE_RB_IO_T) || defined(HAVE_RB_IO_DESCRIPTOR)
382382
rb_io_t *fptr;
383383
#else
384384
OpenFile *fptr;
385385
#endif
386386

387387
Data_Get_Struct(self, struct buffer, buf);
388-
GetOpenFile(rb_convert_type(io, T_FILE, "IO", "to_io"), fptr);
388+
io = rb_convert_type(io, T_FILE, "IO", "to_io");
389+
GetOpenFile(io, fptr);
389390
rb_io_set_nonblock(fptr);
390391

392+
#ifdef HAVE_RB_IO_DESCRIPTOR
393+
ret = buffer_read_from(buf, rb_io_descriptor(io));
394+
#else
391395
ret = buffer_read_from(buf, FPTR_TO_FD(fptr));
396+
#endif
392397
return ret == -1 ? Qnil : INT2NUM(ret);
393398
}
394399

@@ -404,17 +409,22 @@ static VALUE
404409
IO_Buffer_write_to(VALUE self, VALUE io)
405410
{
406411
struct buffer *buf;
407-
#if HAVE_RB_IO_T
412+
#if defined(HAVE_RB_IO_T) || defined(HAVE_RB_IO_DESCRIPTOR)
408413
rb_io_t *fptr;
409414
#else
410415
OpenFile *fptr;
411416
#endif
412417

413418
Data_Get_Struct(self, struct buffer, buf);
414-
GetOpenFile(rb_convert_type(io, T_FILE, "IO", "to_io"), fptr);
419+
io = rb_convert_type(io, T_FILE, "IO", "to_io");
420+
GetOpenFile(io, fptr);
415421
rb_io_set_nonblock(fptr);
416422

423+
#ifdef HAVE_RB_IO_DESCRIPTOR
424+
return INT2NUM(buffer_write_to(buf, rb_io_descriptor(io)));
425+
#else
417426
return INT2NUM(buffer_write_to(buf, FPTR_TO_FD(fptr)));
427+
#endif
418428
}
419429

420430
/*

0 commit comments

Comments
 (0)