* ext/zlib/zlib.c (rb_gzfile_close): Don't raise on double

close for consistent to IO#close.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49893 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
akr 2015-03-08 13:52:51 +00:00
parent 5b06e83345
commit b6d5ce7975
3 changed files with 32 additions and 1 deletions

View File

@ -1,3 +1,8 @@
Sun Mar 8 22:50:57 2015 Tanaka Akira <akr@fsij.org>
* ext/zlib/zlib.c (rb_gzfile_close): Don't raise on double
close for consistent to IO#close.
Sun Mar 8 16:57:35 2015 Nobuyoshi Nakada <nobu@ruby-lang.org> Sun Mar 8 16:57:35 2015 Nobuyoshi Nakada <nobu@ruby-lang.org>
* dir.c (glob_helper): match patterns against legacy short names * dir.c (glob_helper): match patterns against legacy short names

View File

@ -3297,9 +3297,13 @@ rb_gzfile_set_comment(VALUE obj, VALUE str)
static VALUE static VALUE
rb_gzfile_close(VALUE obj) rb_gzfile_close(VALUE obj)
{ {
struct gzfile *gz = get_gzfile(obj); struct gzfile *gz;
VALUE io; VALUE io;
TypedData_Get_Struct(obj, struct gzfile, &gzfile_data_type, gz);
if (!ZSTREAM_IS_READY(&gz->z)) {
return Qnil;
}
io = gz->io; io = gz->io;
gzfile_close(gz, 1); gzfile_close(gz, 1);
return io; return io;

View File

@ -962,6 +962,19 @@ if defined? Zlib
assert_equal(content, read_size) assert_equal(content, read_size)
} }
end end
def test_double_close
Tempfile.create("test_zlib_gzip_reader_close") {|t|
t.binmode
content = "foo"
Zlib::GzipWriter.wrap(t) {|gz| gz.print(content) }
r = Zlib::GzipReader.open(t.path)
assert_equal(content, r.read)
assert_nothing_raised { r.close }
assert_nothing_raised { r.close }
}
end
end end
class TestZlibGzipWriter < Test::Unit::TestCase class TestZlibGzipWriter < Test::Unit::TestCase
@ -1022,6 +1035,15 @@ if defined? Zlib
assert_equal("foo", Zlib::GzipReader.open(t.path) {|gz| gz.read }) assert_equal("foo", Zlib::GzipReader.open(t.path) {|gz| gz.read })
} }
end end
def test_double_close
Tempfile.create("test_zlib_gzip_reader_close") {|t|
t.binmode
w = Zlib::GzipWriter.wrap(t)
assert_nothing_raised { w.close }
assert_nothing_raised { w.close }
}
end
end end
class TestZlib < Test::Unit::TestCase class TestZlib < Test::Unit::TestCase