1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* io.c (copy_stream_body): don't check to_io because

Zlib::GzipWriter#to_io returns the underlying IO.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@21209 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
akr 2008-12-31 07:19:24 +00:00
parent ef2ff2776b
commit 67d66b2652
3 changed files with 70 additions and 4 deletions

View file

@ -1,3 +1,8 @@
Wed Dec 31 15:45:18 2008 Tanaka Akira <akr@fsij.org>
* io.c (copy_stream_body): don't check to_io because
Zlib::GzipWriter#to_io returns the underlying IO.
Wed Dec 31 14:52:33 2008 Tanaka Akira <akr@fsij.org>
* ext/openssl/ossl_digest.c (GetDigestPtr): use StringValueCStr

6
io.c
View file

@ -7702,13 +7702,12 @@ copy_stream_body(VALUE arg)
if (stp->src == argf ||
!(TYPE(stp->src) == T_FILE ||
rb_respond_to(stp->src, rb_intern("to_io")) ||
TYPE(stp->src) == T_STRING ||
rb_respond_to(stp->src, rb_intern("to_path")))) {
src_fd = -1;
}
else {
src_io = rb_check_convert_type(stp->src, T_FILE, "IO", "to_io");
src_io = TYPE(stp->src) == T_FILE ? stp->src : Qnil;
if (NIL_P(src_io)) {
VALUE args[2];
int oflags = O_RDONLY;
@ -7730,13 +7729,12 @@ copy_stream_body(VALUE arg)
if (stp->dst == argf ||
!(TYPE(stp->dst) == T_FILE ||
rb_respond_to(stp->dst, rb_intern("to_io")) ||
TYPE(stp->dst) == T_STRING ||
rb_respond_to(stp->dst, rb_intern("to_path")))) {
dst_fd = -1;
}
else {
dst_io = rb_check_convert_type(stp->dst, T_FILE, "IO", "to_io");
dst_io = TYPE(stp->dst) == T_FILE ? stp->dst : Qnil;
if (NIL_P(dst_io)) {
VALUE args[3];
int oflags = O_WRONLY|O_CREAT|O_TRUNC;

View file

@ -567,6 +567,69 @@ class TestIO < Test::Unit::TestCase
}
end
class Rot13IO
def initialize(io)
@io = io
end
def readpartial(*args)
ret = @io.readpartial(*args)
ret.tr!('a-zA-Z', 'n-za-mN-ZA-M')
ret
end
def write(str)
@io.write(str.tr('a-zA-Z', 'n-za-mN-ZA-M'))
end
def to_io
@io
end
end
def test_copy_stream_io_to_rot13
mkcdtmpdir {
File.open("bar", "w") {|f| f << "vex" }
File.open("bar") {|src|
File.open("baz", "w") {|dst0|
dst = Rot13IO.new(dst0)
ret = IO.copy_stream(src, dst, 3)
assert_equal(3, ret)
}
assert_equal("irk", File.read("baz"))
}
}
end
def test_copy_stream_rot13_to_io
mkcdtmpdir {
File.open("bar", "w") {|f| f << "flap" }
File.open("bar") {|src0|
src = Rot13IO.new(src0)
File.open("baz", "w") {|dst|
ret = IO.copy_stream(src, dst, 4)
assert_equal(4, ret)
}
}
assert_equal("sync", File.read("baz"))
}
end
def test_copy_stream_rot13_to_rot13
mkcdtmpdir {
File.open("bar", "w") {|f| f << "bin" }
File.open("bar") {|src0|
src = Rot13IO.new(src0)
File.open("baz", "w") {|dst0|
dst = Rot13IO.new(dst0)
ret = IO.copy_stream(src, dst, 3)
assert_equal(3, ret)
}
}
assert_equal("bin", File.read("baz"))
}
end
def test_copy_stream_strio_flush
with_pipe {|r, w|
w.sync = false