summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-08-11 14:53:01 +0000
committernagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-08-11 14:53:01 +0000
commit5a5ac31458c5fed5502e4a3dd7b05868ff9379fb (patch)
tree020b7f3c0a39b5c8088b18e1ad6837ba367659da
parentf9a0c3fa4609b6d3a6fdbd18ac8a46d2d11b8340 (diff)
merge revision(s) r46151,r46165: [Backport #9865]
* io.c (rb_io_fileno, rb_io_inspect): non-modification does not error on frozen IO. [ruby-dev:48241] [Bug #9865] * io.c (rb_io_autoclose_p): Don't raise on frozen IO. * test/lib/minitest/unit.rb: IO#autoclose? may raise IOError. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_1@47140 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog9
-rw-r--r--io.c10
-rw-r--r--test/ruby/test_io.rb17
-rw-r--r--version.h2
4 files changed, 32 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index a52d35f287..d6b1b9de42 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+Mon Aug 11 23:38:20 2014 Tanaka Akira <akr@fsij.org>
+
+ * io.c (rb_io_autoclose_p): Don't raise on frozen IO.
+
+Mon Aug 11 23:38:20 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_fileno, rb_io_inspect): non-modification does not
+ error on frozen IO. [ruby-dev:48241] [Bug #9865]
+
Mon Aug 11 22:34:47 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
* configure.in (posix_fadvise): disable use of posix_fadvise
diff --git a/io.c b/io.c
index e5a4d3b40c..0ce71108fc 100644
--- a/io.c
+++ b/io.c
@@ -1914,10 +1914,10 @@ rb_io_fdatasync(VALUE io)
static VALUE
rb_io_fileno(VALUE io)
{
- rb_io_t *fptr;
+ rb_io_t *fptr = RFILE(io)->fptr;
int fd;
- GetOpenFile(io, fptr);
+ rb_io_check_closed(fptr);
fd = fptr->fd;
return INT2FIX(fd);
}
@@ -1969,7 +1969,7 @@ rb_io_inspect(VALUE obj)
VALUE result;
static const char closed[] = " (closed)";
- fptr = RFILE(rb_io_taint_check(obj))->fptr;
+ fptr = RFILE(obj)->fptr;
if (!fptr) return rb_any_to_s(obj);
result = rb_str_new_cstr("#<");
rb_str_append(result, rb_class_name(CLASS_OF(obj)));
@@ -7519,8 +7519,8 @@ rb_io_s_for_fd(int argc, VALUE *argv, VALUE klass)
static VALUE
rb_io_autoclose_p(VALUE io)
{
- rb_io_t *fptr;
- GetOpenFile(io, fptr);
+ rb_io_t *fptr = RFILE(io)->fptr;
+ rb_io_check_closed(fptr);
return (fptr->mode & FMODE_PREP) ? Qfalse : Qtrue;
}
diff --git a/test/ruby/test_io.rb b/test/ruby/test_io.rb
index a7c5b2a39a..631f854a85 100644
--- a/test/ruby/test_io.rb
+++ b/test/ruby/test_io.rb
@@ -1122,6 +1122,8 @@ class TestIO < Test::Unit::TestCase
def test_inspect
with_pipe do |r, w|
assert_match(/^#<IO:fd \d+>$/, r.inspect)
+ r.freeze
+ assert_match(/^#<IO:fd \d+>$/, r.inspect)
end
end
@@ -2751,6 +2753,21 @@ End
assert_equal(2, $stderr.fileno)
end
+ def test_frozen_fileno
+ bug9865 = '[ruby-dev:48241] [Bug #9865]'
+ with_pipe do |r,w|
+ fd = r.fileno
+ assert_equal(fd, r.freeze.fileno, bug9865)
+ end
+ end
+
+ def test_frozen_autoclose
+ with_pipe do |r,w|
+ fd = r.fileno
+ assert_equal(true, r.freeze.autoclose?)
+ end
+ end
+
def test_sysread_locktmp
bug6099 = '[ruby-dev:45297]'
buf = " " * 100
diff --git a/version.h b/version.h
index 6d8999bac3..a2a9a0d960 100644
--- a/version.h
+++ b/version.h
@@ -1,6 +1,6 @@
#define RUBY_VERSION "2.1.2"
#define RUBY_RELEASE_DATE "2014-08-11"
-#define RUBY_PATCHLEVEL 198
+#define RUBY_PATCHLEVEL 199
#define RUBY_RELEASE_YEAR 2014
#define RUBY_RELEASE_MONTH 8