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