child_process: add path to spawn ENOENT Error
Add a file property to the ENOENT Error returned from ChildProcess's spawn function. Signed-off-by: Timothy J Fontaine <tjfontaine@gmail.com>
This commit is contained in:
parent
01c2a670a1
commit
f09b02786f
@ -1010,6 +1010,7 @@ function ChildProcess() {
|
|||||||
this.signalCode = null;
|
this.signalCode = null;
|
||||||
this.exitCode = null;
|
this.exitCode = null;
|
||||||
this.killed = false;
|
this.killed = false;
|
||||||
|
this.spawnfile = null;
|
||||||
|
|
||||||
this._handle = new Process();
|
this._handle = new Process();
|
||||||
this._handle.owner = this;
|
this._handle.owner = this;
|
||||||
@ -1025,7 +1026,8 @@ function ChildProcess() {
|
|||||||
//
|
//
|
||||||
// - spawn failures are reported with exitCode < 0
|
// - spawn failures are reported with exitCode < 0
|
||||||
//
|
//
|
||||||
var err = (exitCode < 0) ? errnoException(exitCode, 'spawn') : null;
|
var syscall = self.spawnfile ? 'spawn ' + self.spawnfile : 'spawn';
|
||||||
|
var err = (exitCode < 0) ? errnoException(exitCode, syscall) : null;
|
||||||
|
|
||||||
if (signalCode) {
|
if (signalCode) {
|
||||||
self.signalCode = signalCode;
|
self.signalCode = signalCode;
|
||||||
@ -1041,6 +1043,9 @@ function ChildProcess() {
|
|||||||
self._handle = null;
|
self._handle = null;
|
||||||
|
|
||||||
if (exitCode < 0) {
|
if (exitCode < 0) {
|
||||||
|
if (self.spawnfile)
|
||||||
|
err.path = self.spawnfile;
|
||||||
|
|
||||||
self.emit('error', err);
|
self.emit('error', err);
|
||||||
} else {
|
} else {
|
||||||
self.emit('exit', self.exitCode, self.signalCode);
|
self.emit('exit', self.exitCode, self.signalCode);
|
||||||
@ -1102,6 +1107,8 @@ ChildProcess.prototype.spawn = function(options) {
|
|||||||
options.envPairs.push('NODE_CHANNEL_FD=' + ipcFd);
|
options.envPairs.push('NODE_CHANNEL_FD=' + ipcFd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.spawnfile = options.file;
|
||||||
|
|
||||||
var err = this._handle.spawn(options);
|
var err = this._handle.spawn(options);
|
||||||
|
|
||||||
if (err == uv.UV_ENOENT) {
|
if (err == uv.UV_ENOENT) {
|
||||||
|
39
test/simple/test-child-process-spawn-error.js
Normal file
39
test/simple/test-child-process-spawn-error.js
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
// Copyright Joyent, Inc. and other Node contributors.
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
|
// copy of this software and associated documentation files (the
|
||||||
|
// "Software"), to deal in the Software without restriction, including
|
||||||
|
// without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
||||||
|
// persons to whom the Software is furnished to do so, subject to the
|
||||||
|
// following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included
|
||||||
|
// in all copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
||||||
|
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
||||||
|
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||||
|
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||||
|
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||||
|
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
var fs = require('fs');
|
||||||
|
var spawn = require('child_process').spawn;
|
||||||
|
var assert = require('assert');
|
||||||
|
|
||||||
|
var errors = 0;
|
||||||
|
|
||||||
|
var enoentPath = 'foo123';
|
||||||
|
assert.equal(fs.existsSync(enoentPath), false);
|
||||||
|
|
||||||
|
var enoentChild = spawn(enoentPath);
|
||||||
|
enoentChild.on('error', function (err) {
|
||||||
|
assert.equal(err.path, enoentPath);
|
||||||
|
errors++;
|
||||||
|
});
|
||||||
|
|
||||||
|
process.on('exit', function() {
|
||||||
|
assert.equal(1, errors);
|
||||||
|
});
|
Loading…
x
Reference in New Issue
Block a user