summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzero1five <zerodengyin@gmail.com>2019-05-12 20:02:31 +0800
committerDaniel Bevenius <daniel.bevenius@gmail.com>2019-05-16 05:14:10 +0200
commit9f99d4e252c58d445738c00dc9e04e8b375086d5 (patch)
tree7dd58fd04937631d69784f020c85d80e6f5cba26
parent03d43539f93be2c401f57d7eac87a5ae933ef905 (diff)
downloadandroid-node-v8-9f99d4e252c58d445738c00dc9e04e8b375086d5.tar.gz
android-node-v8-9f99d4e252c58d445738c00dc9e04e8b375086d5.tar.bz2
android-node-v8-9f99d4e252c58d445738c00dc9e04e8b375086d5.zip
child_process: refactor stdioStringToArray function
reduce the function in both files to one. PR-URL: https://github.com/nodejs/node/pull/27657 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: Rich Trott <rtrott@gmail.com>
-rw-r--r--lib/child_process.js22
-rw-r--r--lib/internal/child_process.js24
2 files changed, 23 insertions, 23 deletions
diff --git a/lib/child_process.js b/lib/child_process.js
index 64ab321f29..26965aa6b9 100644
--- a/lib/child_process.js
+++ b/lib/child_process.js
@@ -37,7 +37,6 @@ const {
ERR_CHILD_PROCESS_IPC_REQUIRED,
ERR_CHILD_PROCESS_STDIO_MAXBUFFER,
ERR_INVALID_ARG_TYPE,
- ERR_INVALID_OPT_VALUE,
ERR_OUT_OF_RANGE
} = require('internal/errors').codes;
const { clearTimeout, setTimeout } = require('timers');
@@ -46,24 +45,14 @@ const child_process = require('internal/child_process');
const {
getValidStdio,
setupChannel,
- ChildProcess
+ ChildProcess,
+ stdioStringToArray
} = child_process;
const MAX_BUFFER = 1024 * 1024;
exports.ChildProcess = ChildProcess;
-function stdioStringToArray(option) {
- switch (option) {
- case 'ignore':
- case 'pipe':
- case 'inherit':
- return [option, option, option, 'ipc'];
- default:
- throw new ERR_INVALID_OPT_VALUE('stdio', option);
- }
-}
-
exports.fork = function fork(modulePath /* , args, options */) {
validateString(modulePath, 'modulePath');
@@ -104,12 +93,13 @@ exports.fork = function fork(modulePath /* , args, options */) {
args = execArgv.concat([modulePath], args);
if (typeof options.stdio === 'string') {
- options.stdio = stdioStringToArray(options.stdio);
+ options.stdio = stdioStringToArray(options.stdio, 'ipc');
} else if (!Array.isArray(options.stdio)) {
// Use a separate fd=3 for the IPC channel. Inherit stdin, stdout,
// and stderr from the parent if silent isn't set.
- options.stdio = options.silent ? stdioStringToArray('pipe') :
- stdioStringToArray('inherit');
+ options.stdio = stdioStringToArray(
+ options.silent ? 'pipe' : 'inherit',
+ 'ipc');
} else if (!options.stdio.includes('ipc')) {
throw new ERR_CHILD_PROCESS_IPC_REQUIRED('options.stdio');
}
diff --git a/lib/internal/child_process.js b/lib/internal/child_process.js
index 2f081d9111..4e6a25a8a3 100644
--- a/lib/internal/child_process.js
+++ b/lib/internal/child_process.js
@@ -214,6 +214,21 @@ const handleConversion = {
}
};
+function stdioStringToArray(stdio, channel) {
+ const options = [];
+
+ switch (stdio) {
+ case 'ignore':
+ case 'pipe': options.push(stdio, stdio, stdio); break;
+ case 'inherit': options.push(0, 1, 2); break;
+ default:
+ throw new ERR_INVALID_OPT_VALUE('stdio', stdio);
+ }
+
+ if (channel) options.push(channel);
+
+ return options;
+}
function ChildProcess() {
EventEmitter.call(this);
@@ -892,13 +907,7 @@ function getValidStdio(stdio, sync) {
// Replace shortcut with an array
if (typeof stdio === 'string') {
- switch (stdio) {
- case 'ignore': stdio = ['ignore', 'ignore', 'ignore']; break;
- case 'pipe': stdio = ['pipe', 'pipe', 'pipe']; break;
- case 'inherit': stdio = [0, 1, 2]; break;
- default:
- throw new ERR_INVALID_OPT_VALUE('stdio', stdio);
- }
+ stdio = stdioStringToArray(stdio);
} else if (!Array.isArray(stdio)) {
throw new ERR_INVALID_OPT_VALUE('stdio', inspect(stdio));
}
@@ -1042,5 +1051,6 @@ module.exports = {
ChildProcess,
setupChannel,
getValidStdio,
+ stdioStringToArray,
spawnSync
};