Browse Source

streams2: Use StringDecoder.end

v0.9.4-release
isaacs 12 years ago
parent
commit
f624ccb475
  1. 24
      lib/_stream_readable.js

24
lib/_stream_readable.js

@ -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');

Loading…
Cancel
Save