From 77e3078ede833e86a1ee0e2ce745b15e892bdbf6 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Wed, 18 Dec 2019 10:25:18 +0900 Subject: [ruby/io-console] Set raw mode strictly same as cfmakeraw * Default VMIN and VTIME to minimum input. * Disable parity check bits explicitly. * Disable all bits for flow control on input. Co-Authored-By: NARUSE, Yui https://github.com/ruby/io-console/commit/5ce201a686 --- ext/io/console/console.c | 6 ++++-- test/io/console/test_io_console.rb | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/ext/io/console/console.c b/ext/io/console/console.c index 9bd825aaa0..ac5b6a611c 100644 --- a/ext/io/console/console.c +++ b/ext/io/console/console.c @@ -165,11 +165,13 @@ set_rawmode(conmode *t, void *arg) cfmakeraw(t); t->c_lflag &= ~(ECHOE|ECHOK); #elif defined HAVE_TERMIOS_H || defined HAVE_TERMIO_H - t->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON); + t->c_iflag &= ~(IGNBRK|BRKINT|IGNPAR|PARMRK|INPCK|ISTRIP|INLCR|IGNCR|ICRNL|IXON|IXOFF|IXANY|IMAXBEL); t->c_oflag &= ~OPOST; - t->c_lflag &= ~(ECHO|ECHOE|ECHOK|ECHONL|ICANON|ISIG|IEXTEN); + t->c_lflag &= ~(ECHO|ECHOE|ECHOK|ECHONL|ICANON|ISIG|IEXTEN|XCASE); t->c_cflag &= ~(CSIZE|PARENB); t->c_cflag |= CS8; + t->c_cc[VMIN] = 1; + t->c_cc[VTIME] = 0; #elif defined HAVE_SGTTY_H t->sg_flags &= ~ECHO; t->sg_flags |= RAW; diff --git a/test/io/console/test_io_console.rb b/test/io/console/test_io_console.rb index 0b28ff1200..219b84615e 100644 --- a/test/io/console/test_io_console.rb +++ b/test/io/console/test_io_console.rb @@ -352,7 +352,7 @@ defined?(PTY) and defined?(IO.console) and TestIO_Console.class_eval do if cc = ctrl["intr"] assert_ctrl("#{cc.ord}", cc, r, w) assert_ctrl("#{cc.ord}", cc, r, w) - # assert_ctrl("Interrupt", cc, r, w) + assert_ctrl("Interrupt", cc, r, w) end if cc = ctrl["dsusp"] assert_ctrl("#{cc.ord}", cc, r, w) -- cgit v1.2.3