From bf455fd5829065db4f9f24a48ce823e3c497e402 Mon Sep 17 00:00:00 2001 From: take-cheeze Date: Sat, 27 Mar 2021 02:20:25 +0900 Subject: Add IO#getbyte --- mrbgems/mruby-io/README.md | 4 ++-- mrbgems/mruby-io/mrblib/io.rb | 11 +++++++++++ mrbgems/mruby-io/test/io.rb | 9 +++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/mrbgems/mruby-io/README.md b/mrbgems/mruby-io/README.md index db52c4a74..407cba65c 100644 --- a/mrbgems/mruby-io/README.md +++ b/mrbgems/mruby-io/README.md @@ -59,7 +59,7 @@ Add the line below to your build configuration. | IO#fileno, IO#to_i | o | | | IO#flush | o | | | IO#fsync | | | -| IO#getbyte | | | +| IO#getbyte | o | | | IO#getc | o | | | IO#gets | o | | | IO#internal_encoding | | | @@ -93,7 +93,7 @@ Add the line below to your build configuration. | IO#sysseek | o | | | IO#syswrite | o | | | IO#to_io | | | -| IO#ungetbyte | | | +| IO#ungetbyte | o | | | IO#ungetc | o | | | IO#write | o | | | IO#write_nonblock | | | diff --git a/mrbgems/mruby-io/mrblib/io.rb b/mrbgems/mruby-io/mrblib/io.rb index 034f88529..d96bb2b23 100644 --- a/mrbgems/mruby-io/mrblib/io.rb +++ b/mrbgems/mruby-io/mrblib/io.rb @@ -184,6 +184,11 @@ class IO nil end + def ungetbyte(substr) + substr = substr.chr if substr.is_a? Integer + ungetc substr + end + def read(length = nil, outbuf = "") unless length.nil? unless length.is_a? Integer @@ -296,6 +301,12 @@ class IO end end + def getbyte + ret = getc + return ret.getbyte 0 if ret + ret + end + # 15.2.20.5.3 def each(&block) return to_enum unless block diff --git a/mrbgems/mruby-io/test/io.rb b/mrbgems/mruby-io/test/io.rb index 328b5292f..88a89fee4 100644 --- a/mrbgems/mruby-io/test/io.rb +++ b/mrbgems/mruby-io/test/io.rb @@ -105,6 +105,15 @@ assert('IO#getc', '15.2.20.5.8') do io.close end +assert('IO#getbyte') do + io = IO.new(IO.sysopen($mrbtest_io_rfname)) + $mrbtest_io_msg.split("").each do |ch| + assert_equal ch.getbyte(0), io.getbyte + end + assert_equal nil, io.getbyte + io.close +end + #assert('IO#gets', '15.2.20.5.9') do #assert('IO#initialize_copy', '15.2.20.5.10') do #assert('IO#print', '15.2.20.5.11') do -- cgit v1.2.3 From 5342b5cfef8eb0cb4588fb8fac457b83cae7ddf2 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Sat, 10 Apr 2021 19:03:02 +0900 Subject: io.rb: `@buf` should be empty on `EOF`; #4983, #5389 --- mrbgems/mruby-io/mrblib/io.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/mrbgems/mruby-io/mrblib/io.rb b/mrbgems/mruby-io/mrblib/io.rb index d96bb2b23..6519df9de 100644 --- a/mrbgems/mruby-io/mrblib/io.rb +++ b/mrbgems/mruby-io/mrblib/io.rb @@ -295,8 +295,6 @@ class IO begin readchar rescue EOFError - c = @buf[0] - @buf[0,1]="" if c nil end end -- cgit v1.2.3 From 167e0b3f4f12133e035d5771070628637398c149 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Sat, 10 Apr 2021 19:04:09 +0900 Subject: io.c: add assertions to `mrb_io_bufread()`; ref #5389 --- mrbgems/mruby-io/src/io.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mrbgems/mruby-io/src/io.c b/mrbgems/mruby-io/src/io.c index d29f839f9..234d7b1fc 100644 --- a/mrbgems/mruby-io/src/io.c +++ b/mrbgems/mruby-io/src/io.c @@ -1476,6 +1476,9 @@ mrb_io_bufread(mrb_state *mrb, mrb_value self) mrb_int len; mrb_get_args(mrb, "Si", &str, &len); + mrb_assert(RSTRING_LEN(str) > 0); + mrb_assert(RSTRING_PTR(str) != NULL); + mrb_str_modify(mrb, RSTRING(str)); return io_bufread(mrb, str, len); } -- cgit v1.2.3 From 8fa1ff9a03e1331a12408cece0f07f367be9ae1b Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Sat, 10 Apr 2021 19:04:58 +0900 Subject: io.rb: add `IO#readbyte`; ref #5389 --- mrbgems/mruby-io/README.md | 2 +- mrbgems/mruby-io/mrblib/io.rb | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/mrbgems/mruby-io/README.md b/mrbgems/mruby-io/README.md index 407cba65c..2c5d7a9ac 100644 --- a/mrbgems/mruby-io/README.md +++ b/mrbgems/mruby-io/README.md @@ -77,7 +77,7 @@ Add the line below to your build configuration. | IO#puts | o | | | IO#read | o | | | IO#read_nonblock | | | -| IO#readbyte | | | +| IO#readbyte | o | | | IO#readchar | o | | | IO#readline | o | | | IO#readlines | o | | diff --git a/mrbgems/mruby-io/mrblib/io.rb b/mrbgems/mruby-io/mrblib/io.rb index 6519df9de..8d00c316d 100644 --- a/mrbgems/mruby-io/mrblib/io.rb +++ b/mrbgems/mruby-io/mrblib/io.rb @@ -299,6 +299,11 @@ class IO end end + def readbyte + _read_buf + IO._bufread(@buf, 1).getbyte(0) + end + def getbyte ret = getc return ret.getbyte 0 if ret -- cgit v1.2.3 From 5cac9c847806707c4d651d3563e5723a7b4ccee7 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Sat, 10 Apr 2021 19:06:58 +0900 Subject: io.rb: fix `IO#getbyte` to work with UTF-8 characters; ref #5389 --- mrbgems/mruby-io/mrblib/io.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mrbgems/mruby-io/mrblib/io.rb b/mrbgems/mruby-io/mrblib/io.rb index 8d00c316d..a60562846 100644 --- a/mrbgems/mruby-io/mrblib/io.rb +++ b/mrbgems/mruby-io/mrblib/io.rb @@ -305,9 +305,9 @@ class IO end def getbyte - ret = getc - return ret.getbyte 0 if ret - ret + readbyte + rescue EOFError + nil end # 15.2.20.5.3 -- cgit v1.2.3