windowsVerbatimArguments: !!options.windowsVerbatimArguments
});
- var _stdout = [];
- var _stderr = [];
+ var encoding;
+ var _stdout;
+ var _stderr;
+ if (options.encoding !== 'buffer' && Buffer.isEncoding(options.encoding)) {
+ encoding = options.encoding;
+ _stdout = '';
+ _stderr = '';
+ } else {
+ _stdout = [];
+ _stderr = [];
+ encoding = null;
+ }
var stdoutLen = 0;
var stderrLen = 0;
var killed = false;
if (!callback) return;
// merge chunks
- var stdout = Buffer.concat(_stdout);
- var stderr = Buffer.concat(_stderr);
-
- if (Buffer.isEncoding(options.encoding)) {
- // convert to strings
- stdout = stdout.toString(options.encoding);
- stderr = stderr.toString(options.encoding);
+ var stdout;
+ var stderr;
+ if (!encoding) {
+ stdout = Buffer.concat(_stdout);
+ stderr = Buffer.concat(_stderr);
+ } else {
+ stdout = _stdout;
+ stderr = _stderr;
}
if (ex) {
}
child.stdout.addListener('data', function(chunk) {
- _stdout.push(chunk);
stdoutLen += chunk.length;
if (stdoutLen > options.maxBuffer) {
ex = new Error('stdout maxBuffer exceeded.');
kill();
+ } else {
+ if (!encoding)
+ _stdout.push(chunk);
+ else
+ _stdout += chunk;
}
});
child.stderr.addListener('data', function(chunk) {
- _stderr.push(chunk);
stderrLen += chunk.length;
if (stderrLen > options.maxBuffer) {
ex = new Error('stderr maxBuffer exceeded.');
kill();
+ } else {
+ if (!encoding)
+ _stderr.push(chunk);
+ else
+ _stderr += chunk;
}
});
+ if (encoding) {
+ child.stderr.setEncoding(encoding);
+ child.stdout.setEncoding(encoding);
+ }
+
child.addListener('close', exithandler);
child.addListener('error', errorhandler);