зеркало из https://github.com/github/ruby.git
[ruby/io-console] Fix timeout type error (#18)
Fixed TypeError when IO#getch timed out
`rb_io_wait` returns a bit-flags Integer representing available
events, or Qfalse if timed out. Also the result of `NUM2INT` is
not a `VALUE`.
```
$ ./bin/ruby -v -rio/console -e "p IO.console.getch(intr: true, time: 0.1)"
ruby 3.0.0dev (2020-10-09T20:27:30Z master 5ea2ea74cc
) [x64-mingw32]
-e:1:in `getch': no implicit conversion of false into Integer (TypeError)
from -e:1:in `<main>'
```
https://github.com/ruby/io-console/commit/3bdfaf62df
This commit is contained in:
Родитель
e10d4dce16
Коммит
a79966743c
|
@ -546,7 +546,7 @@ console_getch(int argc, VALUE *argv, VALUE io)
|
|||
if (w < 0) rb_eof_error();
|
||||
if (!(w & RB_WAITFD_IN)) return Qnil;
|
||||
# else
|
||||
VALUE result = RB_NUM2INT(rb_io_wait(io, RUBY_IO_READABLE, timeout));
|
||||
VALUE result = rb_io_wait(io, RUBY_IO_READABLE, timeout);
|
||||
if (result == Qfalse) return Qnil;
|
||||
# endif
|
||||
}
|
||||
|
|
|
@ -471,6 +471,10 @@ defined?(IO.console) and TestIO_Console.class_eval do
|
|||
ensure
|
||||
IO.console(:close)
|
||||
end
|
||||
|
||||
def test_getch_timeout
|
||||
assert_nil(IO.console.getch(intr: true, time: 0.1, min: 0))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче