From 701dcbb3ca9bf04b61cc07156608c61aaf9173f0 Mon Sep 17 00:00:00 2001 From: Samuel Williams Date: Fri, 21 Aug 2020 00:53:08 +1200 Subject: Add support for hooking `IO#read`. --- scheduler.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'scheduler.c') 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)); } -- cgit v1.2.3