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