summaryrefslogtreecommitdiff
path: root/lib/_stream_writable.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/_stream_writable.js')
-rw-r--r--lib/_stream_writable.js52
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) {