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 attr_accessor :lineno
def read(numberOfBytes = nil, buf = nil) def read(numberOfBytes = nil, buf = nil)
buf = "" unless (buf) tbuf = nil
if numberOfBytes if @outputBuffer.length > 0
if numberOfBytes <= @outputBuffer.length if numberOfBytes <= @outputBuffer.length
buf[RANGE_ALL] = @outputBuffer.slice!(0, numberOfBytes) tbuf = @outputBuffer.slice!(0, numberOfBytes)
else else
if @outputBuffer.length > 0 numberOfBytes -= @outputBuffer.length if (numberOfBytes)
buf[RANGE_ALL] = @outputBuffer + sysread(numberOfBytes - @outputBuffer.length, buf) rbuf = sysread(numberOfBytes, buf)
@outputBuffer.slice!(RANGE_ALL) tbuf = @outputBuffer
else tbuf << rbuf if (rbuf)
buf[RANGE_ALL] = sysread(numberOfBytes, buf) @outputBuffer = ""
end
end end
else else
if @outputBuffer.length > 0 tbuf = sysread(numberOfBytes, buf)
buf[RANGE_ALL] = @outputBuffer + sysread(nil, buf) end
@outputBuffer.slice!(RANGE_ALL)
else return nil unless (tbuf)
buf[RANGE_ALL] = sysread(nil, buf)
end if buf
buf.replace(tbuf)
else
buf = tbuf
end end
buf buf

View File

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