summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-03-06 03:48:34 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2012-03-06 03:48:34 +0000
commit4257124d00cc31d4b546f166278090df8e119beb (patch)
treec09fac6c013cec9017cfd64adf7a04db0dd75555
parent9f8a7d00b5e5f06fa9be4f865604b35ccee73ec3 (diff)
merge revision(s) 34917:
* ext/io/console/console.c (set_rawmode): clear ECHOE and ECHOK bits too. * ext/io/console/console.c (echo_p): ignore ECHOE and ECHOK bits. [ruby-dev:45309] [Bug #6116] * ext/io/console/console.c (console_raw): fix rdoc. * ext/io/console/console.c (console_set_echo): mentioned about platform dependency. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_3@34926 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog13
-rw-r--r--ext/io/console/console.c13
-rw-r--r--test/io/console/test_io_console.rb28
-rw-r--r--version.h2
4 files changed, 43 insertions, 13 deletions
diff --git a/ChangeLog b/ChangeLog
index 4df4f121c4..ef9c0af168 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+Tue Mar 6 12:48:08 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * ext/io/console/console.c (set_rawmode): clear ECHOE and ECHOK
+ bits too.
+
+ * ext/io/console/console.c (echo_p): ignore ECHOE and ECHOK bits.
+ [ruby-dev:45309] [Bug #6116]
+
+ * ext/io/console/console.c (console_raw): fix rdoc.
+
+ * ext/io/console/console.c (console_set_echo): mentioned about
+ platform dependency.
+
Tue Mar 6 12:40:08 2012 Nobuyoshi Nakada <nobu@ruby-lang.org>
* ext/io/console/console.c (console_raw, console_set_raw)
diff --git a/ext/io/console/console.c b/ext/io/console/console.c
index d4161fd252..efad30c1ca 100644
--- a/ext/io/console/console.c
+++ b/ext/io/console/console.c
@@ -125,10 +125,11 @@ set_rawmode(conmode *t, void *arg)
{
#ifdef HAVE_CFMAKERAW
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_oflag &= ~OPOST;
- t->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN);
+ t->c_lflag &= ~(ECHO|ECHOE|ECHOK|ECHONL|ICANON|ISIG|IEXTEN);
t->c_cflag &= ~(CSIZE|PARENB);
t->c_cflag |= CS8;
#elif defined HAVE_SGTTY_H
@@ -189,7 +190,7 @@ static int
echo_p(conmode *t)
{
#if defined HAVE_TERMIOS_H || defined HAVE_TERMIO_H
- return (t->c_lflag & (ECHO | ECHOE | ECHOK | ECHONL)) != 0;
+ return (t->c_lflag & (ECHO | ECHONL)) != 0;
#elif defined HAVE_SGTTY_H
return (t->sg_flags & ECHO) != 0;
#elif defined _WIN32
@@ -295,7 +296,7 @@ ttymode(VALUE io, VALUE (*func)(VALUE), void (*setter)(conmode *, void *), void
*
* STDIN.raw(&:gets)
*
- * will read and return a line with echo back and line editing.
+ * will read and return a line without echo back and line editing.
*
* You must require 'io/console' to use this method.
*/
@@ -341,6 +342,8 @@ console_set_raw(int argc, VALUE *argv, VALUE io)
* STDIN.cooked(&:gets)
*
* will read and return a line with echo back and line editing.
+ *
+ * You must require 'io/console' to use this method.
*/
static VALUE
console_cooked(VALUE io)
@@ -355,6 +358,8 @@ console_cooked(VALUE io)
* Enables cooked mode.
*
* If the terminal mode needs to be back, use io.cooked { ... }.
+ *
+ * You must require 'io/console' to use this method.
*/
static VALUE
console_set_cooked(VALUE io)
@@ -415,6 +420,8 @@ console_noecho(VALUE io)
* io.echo = flag
*
* Enables/disables echo back.
+ * On some platforms, all combinations of this flags and raw/cooked
+ * mode may not be valid.
*
* You must require 'io/console' to use this method.
*/
diff --git a/test/io/console/test_io_console.rb b/test/io/console/test_io_console.rb
index d9868bf040..cb2bbcc3a6 100644
--- a/test/io/console/test_io_console.rb
+++ b/test/io/console/test_io_console.rb
@@ -7,14 +7,19 @@ end
require_relative '../../ruby/envutil'
class TestIO_Console < Test::Unit::TestCase
+ Bug6116 = '[ruby-dev:45309]'
+
def test_raw
helper {|m, s|
s.print "abc\n"
assert_equal("abc\r\n", m.gets)
+ assert_send([s, :echo?])
s.raw {
+ assert_not_send([s, :echo?], Bug6116)
s.print "def\n"
assert_equal("def\n", m.gets)
}
+ assert_send([s, :echo?])
s.print "ghi\n"
assert_equal("ghi\r\n", m.gets)
}
@@ -22,14 +27,19 @@ class TestIO_Console < Test::Unit::TestCase
def test_cooked
helper {|m, s|
+ assert_send([s, :echo?])
s.raw {
s.print "abc\n"
assert_equal("abc\n", m.gets)
+ assert_not_send([s, :echo?], Bug6116)
s.cooked {
+ assert_send([s, :echo?])
s.print "def\n"
assert_equal("def\r\n", m.gets)
}
+ assert_not_send([s, :echo?], Bug6116)
}
+ assert_send([s, :echo?])
s.print "ghi\n"
assert_equal("ghi\r\n", m.gets)
}
@@ -37,7 +47,7 @@ class TestIO_Console < Test::Unit::TestCase
def test_echo
helper {|m, s|
- assert(s.echo?)
+ assert_send([s, :echo?])
m.print "a"
assert_equal("a", m.readpartial(10))
}
@@ -46,7 +56,7 @@ class TestIO_Console < Test::Unit::TestCase
def test_noecho
helper {|m, s|
s.noecho {
- assert(!s.echo?)
+ assert_not_send([s, :echo?])
m.print "a"
sleep 0.1
}
@@ -57,7 +67,7 @@ class TestIO_Console < Test::Unit::TestCase
def test_noecho2
helper {|m, s|
- assert(s.echo?)
+ assert_send([s, :echo?])
m.print "a\n"
sleep 0.1
s.print "b\n"
@@ -65,13 +75,13 @@ class TestIO_Console < Test::Unit::TestCase
assert_equal("a\r\nb\r\n", m.readpartial(10))
assert_equal("a\n", s.readpartial(10))
s.noecho {
- assert(!s.echo?)
+ assert_not_send([s, :echo?])
m.print "a\n"
s.print "b\n"
assert_equal("b\r\n", m.readpartial(10))
assert_equal("a\n", s.readpartial(10))
}
- assert(s.echo?)
+ assert_send([s, :echo?])
m.print "a\n"
sleep 0.1
s.print "b\n"
@@ -83,7 +93,7 @@ class TestIO_Console < Test::Unit::TestCase
def test_setecho
helper {|m, s|
- assert(s.echo?)
+ assert_send([s, :echo?])
s.echo = false
m.print "a"
sleep 0.1
@@ -95,7 +105,7 @@ class TestIO_Console < Test::Unit::TestCase
def test_setecho2
helper {|m, s|
- assert(s.echo?)
+ assert_send([s, :echo?])
m.print "a\n"
sleep 0.1
s.print "b\n"
@@ -103,13 +113,13 @@ class TestIO_Console < Test::Unit::TestCase
assert_equal("a\r\nb\r\n", m.readpartial(10))
assert_equal("a\n", s.readpartial(10))
s.echo = false
- assert(!s.echo?)
+ assert_not_send([s, :echo?])
m.print "a\n"
s.print "b\n"
assert_equal("b\r\n", m.readpartial(10))
assert_equal("a\n", s.readpartial(10))
s.echo = true
- assert(s.echo?)
+ assert_send([s, :echo?])
m.print "a\n"
sleep 0.1
s.print "b\n"
diff --git a/version.h b/version.h
index 5d2f4c0c7a..ae3b7721e0 100644
--- a/version.h
+++ b/version.h
@@ -1,5 +1,5 @@
#define RUBY_VERSION "1.9.3"
-#define RUBY_PATCHLEVEL 161
+#define RUBY_PATCHLEVEL 162
#define RUBY_RELEASE_DATE "2012-03-06"
#define RUBY_RELEASE_YEAR 2012