summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-io
diff options
context:
space:
mode:
Diffstat (limited to 'mrbgems/mruby-io')
-rw-r--r--mrbgems/mruby-io/mrblib/io.rb10
1 files changed, 8 insertions, 2 deletions
diff --git a/mrbgems/mruby-io/mrblib/io.rb b/mrbgems/mruby-io/mrblib/io.rb
index 32bac1f0d..6b83644ef 100644
--- a/mrbgems/mruby-io/mrblib/io.rb
+++ b/mrbgems/mruby-io/mrblib/io.rb
@@ -170,8 +170,14 @@ class IO
end
def _read_buf
- return @buf if @buf && @buf.bytesize > 0
- @buf = sysread(BUF_SIZE)
+ return @buf if @buf && @buf.bytesize >= 4 # maximum UTF-8 character is 4 bytes
+ @buf ||= ""
+ begin
+ @buf += sysread(BUF_SIZE)
+ rescue EOFError => e
+ raise e if @buf.empty?
+ end
+ @buf
end
def ungetc(substr)