aboutsummaryrefslogtreecommitdiffstats
path: root/scheduler.c
diff options
context:
space:
mode:
authorSamuel Williams <samuel.williams@oriontransfer.co.nz>2020-08-21 00:53:08 +1200
committerSamuel Williams <samuel.williams@oriontransfer.co.nz>2020-09-14 16:44:09 +1200
commit701dcbb3ca9bf04b61cc07156608c61aaf9173f0 (patch)
tree4f732ba3b246c53a075894eb7e7758bb55e57607 /scheduler.c
parent132453fa521cf87693035769031f3501ddc02f4a (diff)
downloadruby-701dcbb3ca9bf04b61cc07156608c61aaf9173f0.tar.gz
Add support for hooking `IO#read`.
Diffstat (limited to 'scheduler.c')
-rw-r--r--scheduler.c18
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));
}