Sha256: 0392901894bc8c8a3917e47050428d8be692716b49e9390fc2638b5a3d58865c
Contents?: true
Size: 1.25 KB
Versions: 3
Compression:
Stored size: 1.25 KB
Contents
module Zip class Inflater < Decompressor #:nodoc:all def initialize(*args) super @buffer = ''.b @zlib_inflater = ::Zlib::Inflate.new(-Zlib::MAX_WBITS) end def read(length = nil, outbuf = ''.b) return (length.nil? || length.zero? ? '' : nil) if eof while length.nil? || (@buffer.bytesize < length) break if input_finished? @buffer << produce_input end outbuf.replace(@buffer.slice!(0...(length || @buffer.bytesize))) end def eof @buffer.empty? && input_finished? end alias eof? eof private def produce_input retried = 0 begin @zlib_inflater.inflate(input_stream.read(Decompressor::CHUNK_SIZE)) rescue Zlib::BufError raise if retried >= 5 # how many times should we retry? retried += 1 retry end rescue Zlib::Error raise(::Zip::DecompressionError, 'zlib error while inflating') end def input_finished? @zlib_inflater.finished? end end ::Zip::Decompressor.register(::Zip::COMPRESSION_METHOD_DEFLATE, ::Zip::Inflater) end # Copyright (C) 2002, 2003 Thomas Sondergaard # rubyzip is free software; you can redistribute it and/or # modify it under the terms of the ruby license.
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
rubyzip-2.4.1 | lib/zip/inflater.rb |
rubyzip-2.4 | lib/zip/inflater.rb |
rubyzip-2.4.rc1 | lib/zip/inflater.rb |