Merged patch from oss-ruby.

This commit is contained in:
thomas 2006-02-04 09:42:46 +00:00
parent 6d97a8e545
commit 7268ef3cd3
2 changed files with 20 additions and 18 deletions

View File

@ -33,26 +33,28 @@ module IOExtras #:nodoc:
attr_accessor :lineno
def read(numberOfBytes = nil, buf = nil)
buf = "" unless (buf)
tbuf = nil
if numberOfBytes
if @outputBuffer.length > 0
if numberOfBytes <= @outputBuffer.length
buf[RANGE_ALL] = @outputBuffer.slice!(0, numberOfBytes)
tbuf = @outputBuffer.slice!(0, numberOfBytes)
else
if @outputBuffer.length > 0
buf[RANGE_ALL] = @outputBuffer + sysread(numberOfBytes - @outputBuffer.length, buf)
@outputBuffer.slice!(RANGE_ALL)
else
buf[RANGE_ALL] = sysread(numberOfBytes, buf)
end
numberOfBytes -= @outputBuffer.length if (numberOfBytes)
rbuf = sysread(numberOfBytes, buf)
tbuf = @outputBuffer
tbuf << rbuf if (rbuf)
@outputBuffer = ""
end
else
if @outputBuffer.length > 0
buf[RANGE_ALL] = @outputBuffer + sysread(nil, buf)
@outputBuffer.slice!(RANGE_ALL)
else
buf[RANGE_ALL] = sysread(nil, buf)
end
tbuf = sysread(numberOfBytes, buf)
end
return nil unless (tbuf)
if buf
buf.replace(tbuf)
else
buf = tbuf
end
buf

View File

@ -177,7 +177,7 @@ module Zip
readEverything = (numberOfBytes == nil)
while (readEverything || @outputBuffer.length < numberOfBytes)
break if internal_input_finished?
@outputBuffer << internal_produce_input
@outputBuffer << internal_produce_input(buf)
end
return value_when_finished if @outputBuffer.length==0 && input_finished?
endIndex= numberOfBytes==nil ? @outputBuffer.length : numberOfBytes
@ -199,8 +199,8 @@ module Zip
private
def internal_produce_input
@zlibInflater.inflate(@inputStream.read(Decompressor::CHUNK_SIZE))
def internal_produce_input(buf = nil)
@zlibInflater.inflate(@inputStream.read(Decompressor::CHUNK_SIZE, buf))
end
def internal_input_finished?