1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-01 21:35:40 +02:00

Better error reporting when process exec fails

This commit is contained in:
Anton Leherbauer 2008-03-13 14:28:09 +00:00
parent 2f75ef3694
commit 08bfbd1229

View file

@ -1,5 +1,5 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2000, 2006 QNX Software Systems and others. * Copyright (c) 2000, 2008 QNX Software Systems and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -7,6 +7,7 @@
* *
* Contributors: * Contributors:
* QNX Software Systems - Initial API and implementation * QNX Software Systems - Initial API and implementation
* Anton Leherbauer (Wind River Systems)
*******************************************************************************/ *******************************************************************************/
package org.eclipse.cdt.utils.spawner; package org.eclipse.cdt.utils.spawner;
@ -19,6 +20,7 @@ import java.util.StringTokenizer;
import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.utils.pty.PTY; import org.eclipse.cdt.utils.pty.PTY;
import org.eclipse.osgi.util.NLS;
public class Spawner extends Process { public class Spawner extends Process {
@ -240,7 +242,7 @@ public class Spawner extends Process {
// Check for errors. // Check for errors.
if (pid == -1) { if (pid == -1) {
throw new IOException("Exec error:" + reaper.getErrorMessage()); //$NON-NLS-1$ throw new IOException(reaper.getErrorMessage());
} }
} }
@ -339,14 +341,14 @@ public class Spawner extends Process {
String[] fCmdarray; String[] fCmdarray;
String[] fEnvp; String[] fEnvp;
String fDirpath; String fDirpath;
String fErrMesg; volatile Throwable fException;
public Reaper(String[] array, String[] env, String dir) { public Reaper(String[] array, String[] env, String dir) {
super("Spawner Reaper"); //$NON-NLS-1$ super("Spawner Reaper"); //$NON-NLS-1$
fCmdarray = array; fCmdarray = array;
fEnvp = env; fEnvp = env;
fDirpath = dir; fDirpath = dir;
fErrMesg = new String(CCorePlugin.getResourceString("Util.error.cannotRun") + fCmdarray[0]); //$NON-NLS-1$ fException = null;
} }
int execute(String[] cmdarray, String[] envp, String dir, int[] channels) throws IOException { int execute(String[] cmdarray, String[] envp, String dir, int[] channels) throws IOException {
@ -358,7 +360,7 @@ public class Spawner extends Process {
pid = execute(fCmdarray, fEnvp, fDirpath, fChannels); pid = execute(fCmdarray, fEnvp, fDirpath, fChannels);
} catch (Exception e) { } catch (Exception e) {
pid = -1; pid = -1;
fErrMesg = e.getMessage(); fException= e;
} }
// Tell spawner that the process started. // Tell spawner that the process started.
@ -377,7 +379,8 @@ public class Spawner extends Process {
} }
public String getErrorMessage() { public String getErrorMessage() {
return fErrMesg; final String reason= fException != null ? fException.getMessage() : "Unknown reason"; //$NON-NLS-1$
return NLS.bind(CCorePlugin.getResourceString("Util.error.cannotRun"), fCmdarray[0], reason); //$NON-NLS-1$
} }
} }
} }