From: isaacs Date: Fri, 12 Oct 2012 18:45:17 +0000 (-0700) Subject: streams2: Use StringDecoder.end X-Git-Tag: v0.9.4~42^2~51 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f624ccb475aa0d0f39f7fdf9d40a08fd3b98242b;p=platform%2Fupstream%2Fnodejs.git streams2: Use StringDecoder.end --- diff --git a/lib/_stream_readable.js b/lib/_stream_readable.js index 06797c4..51201e8 100644 --- a/lib/_stream_readable.js +++ b/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');