lib/zip/pass_thru_decompressor.rb
module Zip
class PassThruDecompressor < Decompressor #:nodoc:all
def initialize(input_stream, chars_to_read)
super(input_stream)
@chars_to_read = chars_to_read
@read_so_far = 0
@has_returned_empty_string = false
end
def sysread(number_of_bytes = nil, buf = '')
if input_finished?
has_returned_empty_string_val = @has_returned_empty_string
@has_returned_empty_string = true
return '' unless has_returned_empty_string_val
return
end
if number_of_bytes.nil? || @read_so_far + number_of_bytes > @chars_to_read
number_of_bytes = @chars_to_read - @read_so_far
end
@read_so_far += number_of_bytes
@input_stream.read(number_of_bytes, buf)
end
def produce_input
sysread(::Zip::Decompressor::CHUNK_SIZE)
end
def input_finished?
@read_so_far >= @chars_to_read
end
alias :eof :input_finished?
alias :eof? :input_finished?
end
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.