|
|
@ -153,6 +153,13 @@ Readable.prototype.read = function(n) { |
|
|
|
if (!chunk || !chunk.length) { |
|
|
|
// eof
|
|
|
|
state.ended = true; |
|
|
|
if (state.decoder) { |
|
|
|
chunk = state.decoder.end(); |
|
|
|
if (chunk && chunk.length) { |
|
|
|
state.buffer.push(chunk); |
|
|
|
state.length += chunk.length; |
|
|
|
} |
|
|
|
} |
|
|
|
// if we've ended and we have some data left, then emit
|
|
|
|
// 'readable' now to make sure it gets picked up.
|
|
|
|
if (!sync) { |
|
|
@ -395,11 +402,26 @@ Readable.prototype.wrap = function(stream) { |
|
|
|
|
|
|
|
stream.on('end', function() { |
|
|
|
state.ended = true; |
|
|
|
if (state.length === 0) |
|
|
|
if (state.decoder) { |
|
|
|
var chunk = state.decoder.end(); |
|
|
|
if (chunk && chunk.length) { |
|
|
|
state.buffer.push(chunk); |
|
|
|
state.length += chunk.length; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (state.length > 0) |
|
|
|
this.emit('readable'); |
|
|
|
else |
|
|
|
endReadable(this); |
|
|
|
}.bind(this)); |
|
|
|
|
|
|
|
stream.on('data', function(chunk) { |
|
|
|
if (state.decoder) |
|
|
|
chunk = state.decoder.write(chunk); |
|
|
|
if (!chunk || !chunk.length) |
|
|
|
return; |
|
|
|
|
|
|
|
state.buffer.push(chunk); |
|
|
|
state.length += chunk.length; |
|
|
|
this.emit('readable'); |
|
|
|