summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--mrblib/io.rb15
-rw-r--r--test/io.rb1
2 files changed, 11 insertions, 5 deletions
diff --git a/mrblib/io.rb b/mrblib/io.rb
index 902d847d2..fceea1171 100644
--- a/mrblib/io.rb
+++ b/mrblib/io.rb
@@ -171,11 +171,16 @@ class IO
end
def read(length = nil)
- unless length.nil? or length.class == Fixnum
- raise TypeError.new "can't convert #{length.class} into Integer"
- end
- if length && length < 0
- raise ArgumentError.new "negative length: #{length} given"
+ unless length.nil?
+ unless length.is_a? Fixnum
+ raise TypeError.new "can't convert #{length.class} into Integer"
+ end
+ if length < 0
+ raise ArgumentError.new "negative length: #{length} given"
+ end
+ if length == 0
+ return "" # easy case
+ end
end
str = ''
diff --git a/test/io.rb b/test/io.rb
index b5b952425..ebfd2dd54 100644
--- a/test/io.rb
+++ b/test/io.rb
@@ -93,6 +93,7 @@ assert('IO#read', '15.2.20.5.14') do
assert_raise(TypeError) { io.read("str") }
len = $mrbtest_io_msg.length
+ assert_equal '', io.read(0)
assert_equal 'mruby', io.read(5)
assert_equal $mrbtest_io_msg[5,len], io.read(len)