summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rw-r--r--ext/zlib/zlib.c12
-rw-r--r--test/zlib/test_zlib.rb5
3 files changed, 24 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 60bf443..422d2f3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Sun May 10 12:41:18 2015 Masaki Matsushita <glass.saga@gmail.com>
+
+ * ext/zlib/zlib.c (rb_gzreader_external_encoding):
+ define GzipReader#external_encoding.
+ [Bug #10900]
+
+ * test/zlib/test_zlib.rb: test for above.
+
Sun May 10 11:57:48 2015 Masaki Matsushita <glass.saga@gmail.com>
* ext/win32ole/win32ole_variant.c: fix typo "indicies".
diff --git a/ext/zlib/zlib.c b/ext/zlib/zlib.c
index 9c2b7b6..564f5c8 100644
--- a/ext/zlib/zlib.c
+++ b/ext/zlib/zlib.c
@@ -4237,6 +4237,17 @@ rb_gzreader_readlines(int argc, VALUE *argv, VALUE obj)
return dst;
}
+/*
+ * Document-method: Zlib::GzipReader#external_encoding
+ *
+ * See Zlib::GzipReader documentation for a description.
+ */
+static VALUE
+rb_gzreader_external_encoding(VALUE self)
+{
+ return rb_enc_from_encoding(get_gzfile(self)->enc);
+}
+
#endif /* GZIP_SUPPORT */
void
@@ -4505,6 +4516,7 @@ Init_zlib(void)
rb_define_method(cGzipReader, "each_line", rb_gzreader_each, -1);
rb_define_method(cGzipReader, "lines", rb_gzreader_lines, -1);
rb_define_method(cGzipReader, "readlines", rb_gzreader_readlines, -1);
+ rb_define_method(cGzipReader, "external_encoding", rb_gzreader_external_encoding, 0);
/* The OS code of current host */
rb_define_const(mZlib, "OS_CODE", INT2FIX(OS_CODE));
diff --git a/test/zlib/test_zlib.rb b/test/zlib/test_zlib.rb
index 63bbd27..f52c7e0 100644
--- a/test/zlib/test_zlib.rb
+++ b/test/zlib/test_zlib.rb
@@ -953,7 +953,10 @@ if defined? Zlib
content = (0..255).to_a.pack('c*')
Zlib::GzipWriter.wrap(t) {|gz| gz.print(content) }
- read_all = Zlib::GzipReader.open(t.path) {|gz| gz.read }
+ read_all = Zlib::GzipReader.open(t.path) do |gz|
+ assert_equal(Encoding.default_external, gz.external_encoding)
+ gz.read
+ end
assert_equal(Encoding.default_external, read_all.encoding)
# chunks are in BINARY regardless of encoding settings