summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--mrblib/io.rb4
-rw-r--r--src/io.c9
-rw-r--r--test/io.rb12
3 files changed, 15 insertions, 10 deletions
diff --git a/mrblib/io.rb b/mrblib/io.rb
index cd8c801d2..902d847d2 100644
--- a/mrblib/io.rb
+++ b/mrblib/io.rb
@@ -11,6 +11,10 @@ class IO
BUF_SIZE = 4096
+ def self.for_fd *args
+ self.new(*args)
+ end
+
def self.open(*args, &block)
io = self.new(*args)
diff --git a/src/io.c b/src/io.c
index 9b51ef780..cbaf523d8 100644
--- a/src/io.c
+++ b/src/io.c
@@ -354,14 +354,6 @@ fptr_finalize(mrb_state *mrb, struct mrb_io *fptr, int noraise)
}
mrb_value
-mrb_io_s_for_fd(mrb_state *mrb, mrb_value klass)
-{
- mrb_value io = mrb_obj_value(mrb_data_object_alloc(mrb, mrb_class_ptr(klass), NULL, &mrb_io_type));
-
- return mrb_io_initialize(mrb, io);
-}
-
-mrb_value
mrb_io_s_sysclose(mrb_state *mrb, mrb_value klass)
{
mrb_int fd;
@@ -746,7 +738,6 @@ mrb_init_io(mrb_state *mrb)
mrb_define_class_method(mrb, io, "_popen", mrb_io_s_popen, MRB_ARGS_ANY());
mrb_define_class_method(mrb, io, "_sysclose", mrb_io_s_sysclose, MRB_ARGS_REQ(1));
#endif
- mrb_define_class_method(mrb, io, "for_fd", mrb_io_s_for_fd, MRB_ARGS_REQ(1)|MRB_ARGS_OPT(2));
mrb_define_class_method(mrb, io, "select", mrb_io_s_select, MRB_ARGS_ANY());
mrb_define_class_method(mrb, io, "sysopen", mrb_io_s_sysopen, MRB_ARGS_ANY());
diff --git a/test/io.rb b/test/io.rb
index 0ec0ef725..b5b952425 100644
--- a/test/io.rb
+++ b/test/io.rb
@@ -129,8 +129,18 @@ assert('IO#write', '15.2.20.5.20') do
true
end
+assert('IO.for_fd') do
+ fd = IO.sysopen($mrbtest_io_rfname)
+ io = IO.for_fd(fd)
+ assert_equal $mrbtest_io_msg, io.read
+ io.close
+ true
+end
+
assert('IO.new') do
- IO.new(0)
+ io = IO.new(0)
+ io.close
+ true
end
assert('IO gc check') do