mirror of https://github.com/lukechilds/node.git
Browse Source
Move the implementation of SyncWriteStream to internal/fs. PR-URL: https://github.com/nodejs/node/pull/6749 Reviewed-By: Ron Korving <ron@ronkorving.nl> Reviewed-By: Сковорода Никита Андреевич <chalkerx@gmail.com>v7.x
James M Snell
8 years ago
4 changed files with 86 additions and 73 deletions
@ -0,0 +1,78 @@ |
|||
'use strict'; |
|||
|
|||
const Buffer = require('buffer').Buffer; |
|||
const Stream = require('stream').Stream; |
|||
const fs = require('fs'); |
|||
const util = require('util'); |
|||
|
|||
function assertEncoding(encoding) { |
|||
if (encoding && !Buffer.isEncoding(encoding)) { |
|||
throw new Error(`Unknown encoding: ${encoding}`); |
|||
} |
|||
} |
|||
exports.assertEncoding = assertEncoding; |
|||
|
|||
// Temporary hack for process.stdout and process.stderr when piped to files.
|
|||
function SyncWriteStream(fd, options) { |
|||
Stream.call(this); |
|||
|
|||
options = options || {}; |
|||
|
|||
this.fd = fd; |
|||
this.writable = true; |
|||
this.readable = false; |
|||
this.autoClose = options.autoClose === undefined ? true : options.autoClose; |
|||
} |
|||
|
|||
util.inherits(SyncWriteStream, Stream); |
|||
|
|||
SyncWriteStream.prototype.write = function(data, arg1, arg2) { |
|||
var encoding, cb; |
|||
|
|||
// parse arguments
|
|||
if (arg1) { |
|||
if (typeof arg1 === 'string') { |
|||
encoding = arg1; |
|||
cb = arg2; |
|||
} else if (typeof arg1 === 'function') { |
|||
cb = arg1; |
|||
} else { |
|||
throw new Error('Bad arguments'); |
|||
} |
|||
} |
|||
assertEncoding(encoding); |
|||
|
|||
// Change strings to buffers. SLOW
|
|||
if (typeof data === 'string') { |
|||
data = Buffer.from(data, encoding); |
|||
} |
|||
|
|||
fs.writeSync(this.fd, data, 0, data.length); |
|||
|
|||
if (cb) { |
|||
process.nextTick(cb); |
|||
} |
|||
|
|||
return true; |
|||
}; |
|||
|
|||
|
|||
SyncWriteStream.prototype.end = function(data, arg1, arg2) { |
|||
if (data) { |
|||
this.write(data, arg1, arg2); |
|||
} |
|||
this.destroy(); |
|||
}; |
|||
|
|||
|
|||
SyncWriteStream.prototype.destroy = function() { |
|||
if (this.autoClose) |
|||
fs.closeSync(this.fd); |
|||
this.fd = null; |
|||
this.emit('close'); |
|||
return true; |
|||
}; |
|||
|
|||
SyncWriteStream.prototype.destroySoon = SyncWriteStream.prototype.destroy; |
|||
|
|||
exports.SyncWriteStream = SyncWriteStream; |
Loading…
Reference in new issue