diff options
author | Samuel Williams <samuel.williams@oriontransfer.co.nz> | 2020-08-21 00:53:08 +1200 |
---|---|---|
committer | Samuel Williams <samuel.williams@oriontransfer.co.nz> | 2020-09-14 16:44:09 +1200 |
commit | 701dcbb3ca9bf04b61cc07156608c61aaf9173f0 (patch) | |
tree | 4f732ba3b246c53a075894eb7e7758bb55e57607 /scheduler.c | |
parent | 132453fa521cf87693035769031f3501ddc02f4a (diff) |
Add support for hooking `IO#read`.
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/3434
Diffstat (limited to 'scheduler.c')
-rw-r--r-- | scheduler.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/scheduler.c b/scheduler.c index 4eaf12b333..9821d07636 100644 --- a/scheduler.c +++ b/scheduler.c @@ -59,13 +59,23 @@ VALUE rb_scheduler_io_wait_writable(VALUE scheduler, VALUE io) return rb_scheduler_io_wait(scheduler, io, RB_UINT2NUM(RUBY_IO_WRITABLE), Qnil); } -VALUE rb_scheduler_io_read(VALUE scheduler, VALUE io, VALUE buffer, VALUE offset, VALUE length) +int rb_scheduler_supports_io_read(VALUE scheduler) { - return rb_funcall(scheduler, id_io_read, 4, io, buffer, offset, length); + return rb_respond_to(scheduler, id_io_read); } -VALUE rb_scheduler_io_write(VALUE scheduler, VALUE io, VALUE buffer, VALUE offset, VALUE length) +VALUE rb_scheduler_io_read(VALUE scheduler, VALUE io, VALUE buffer, size_t offset, size_t length) +{ + return rb_funcall(scheduler, id_io_read, 4, io, buffer, SIZET2NUM(offset), SIZET2NUM(length)); +} + +int rb_scheduler_supports_io_write(VALUE scheduler) +{ + return rb_respond_to(scheduler, id_io_write); +} + +VALUE rb_scheduler_io_write(VALUE scheduler, VALUE io, VALUE buffer, size_t offset, size_t length) { // We should ensure string has capacity to receive data, and then resize it afterwards. - return rb_funcall(scheduler, id_io_write, 4, io, buffer, offset, length); + return rb_funcall(scheduler, id_io_write, 4, io, buffer, SIZET2NUM(offset), SIZET2NUM(length)); } |