diff options
Diffstat (limited to 'lib/mogilefs/copy_stream.rb')
-rw-r--r-- | lib/mogilefs/copy_stream.rb | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/lib/mogilefs/copy_stream.rb b/lib/mogilefs/copy_stream.rb index b928031..7531f54 100644 --- a/lib/mogilefs/copy_stream.rb +++ b/lib/mogilefs/copy_stream.rb @@ -3,24 +3,26 @@ # internal compatibility class for older Rubies module MogileFS::CopyStream # :nodoc: def self.copy_stream(src, dst) - src_io = String === src ? File.open(src) : src + src_io = src.respond_to?(:to_str) ? File.open(src) : src + dst_io = dst.respond_to?(:to_str) ? File.open(dst, "w") : dst buf = "" written = 0 if src_io.respond_to?(:readpartial) begin src_io.readpartial(0x4000, buf) - written += dst.write(buf) + written += dst_io.write(buf) rescue EOFError break end while true else while src_io.read(0x4000, buf) - written += dst.write(buf) + written += dst_io.write(buf) end end - dst.flush if dst.respond_to?(:flush) + dst_io.flush if dst_io.respond_to?(:flush) written ensure - src_io.close if String === src + src_io.close if src_io != src + dst_io.close if dst_io != dst end end |