diff options
Diffstat (limited to 'lib/_stream_writable.js')
-rw-r--r-- | lib/_stream_writable.js | 52 |
1 files changed, 18 insertions, 34 deletions
diff --git a/lib/_stream_writable.js b/lib/_stream_writable.js index 2dff2d8c75..57926ad57b 100644 --- a/lib/_stream_writable.js +++ b/lib/_stream_writable.js @@ -146,15 +146,6 @@ function validChunk(stream, state, chunk, cb) { return valid; } -function decodeChunk(state, chunk, encoding) { - if (!state.objectMode && - state.decodeStrings !== false && - typeof chunk === 'string') { - chunk = new Buffer(chunk, encoding); - } - return chunk; -} - Writable.prototype.write = function(chunk, encoding, cb) { var state = this._writableState; var ret = false; @@ -177,6 +168,15 @@ Writable.prototype.write = function(chunk, encoding, cb) { return ret; }; +function decodeChunk(state, chunk, encoding) { + if (!state.objectMode && + state.decodeStrings !== false && + typeof chunk === 'string') { + chunk = new Buffer(chunk, encoding); + } + return chunk; +} + // if we're already writing something, then just put this // in the queue, and wait our turn. Otherwise, call _write // If we return false, then we need a drain event, so set that flag. @@ -184,17 +184,13 @@ function writeOrBuffer(stream, state, chunk, encoding, cb) { chunk = decodeChunk(state, chunk, encoding); var len = state.objectMode ? 1 : chunk.length; - // XXX Remove. _write() should take an encoding. - if (state.decodeStrings === false) - chunk = [chunk, encoding]; - state.length += len; var ret = state.length < state.highWaterMark; state.needDrain = !ret; if (state.writing) - state.buffer.push([chunk, cb]); // XXX [chunk,encoding,cb] + state.buffer.push([chunk, encoding, cb]); else doWrite(stream, state, len, chunk, encoding, cb); @@ -206,8 +202,7 @@ function doWrite(stream, state, len, chunk, encoding, cb) { state.writecb = cb; state.writing = true; state.sync = true; - // XXX stream._write(chunk, encoding, state.onwrite) - stream._write(chunk, state.onwrite); + stream._write(chunk, encoding, state.onwrite); state.sync = false; } @@ -271,21 +266,12 @@ function onwriteDrain(stream, state) { function clearBuffer(stream, state) { state.bufferProcessing = true; - // XXX buffer entry should be [chunk, encoding, cb] for (var c = 0; c < state.buffer.length; c++) { - var chunkCb = state.buffer[c]; - var chunk = chunkCb[0]; - var cb = chunkCb[1]; - var encoding = ''; - var len; - - if (state.objectMode) - len = 1; - else if (false === state.decodeStrings) { - len = chunk[0].length; - encoding = chunk[1]; - } else - len = chunk.length; + var entry = state.buffer[c]; + var chunk = entry[0]; + var encoding = entry[1]; + var cb = entry[2]; + var len = state.objectMode ? 1 : chunk.length; doWrite(stream, state, len, chunk, encoding, cb); @@ -306,10 +292,8 @@ function clearBuffer(stream, state) { state.buffer.length = 0; } -Writable.prototype._write = function(chunk, cb) { - process.nextTick(function() { - cb(new Error('not implemented')); - }); +Writable.prototype._write = function(chunk, encoding, cb) { + cb(new Error('not implemented')); }; Writable.prototype.end = function(chunk, encoding, cb) { |