Merged patch from oss-ruby.
This commit is contained in:
parent
6d97a8e545
commit
7268ef3cd3
|
@ -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
|
||||||
|
|
|
@ -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?
|
||||||
|
|
Loading…
Reference in New Issue