diff options
Diffstat (limited to 'core/org.eclipse.cdt.core.native/src/org/eclipse/cdt/utils/spawner/ProcessFactory.java')
-rw-r--r-- | core/org.eclipse.cdt.core.native/src/org/eclipse/cdt/utils/spawner/ProcessFactory.java | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/core/org.eclipse.cdt.core.native/src/org/eclipse/cdt/utils/spawner/ProcessFactory.java b/core/org.eclipse.cdt.core.native/src/org/eclipse/cdt/utils/spawner/ProcessFactory.java new file mode 100644 index 00000000000..7784db6b527 --- /dev/null +++ b/core/org.eclipse.cdt.core.native/src/org/eclipse/cdt/utils/spawner/ProcessFactory.java @@ -0,0 +1,101 @@ +/******************************************************************************* + * Copyright (c) 2000, 2014 QNX Software Systems and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * QNX Software Systems - Initial API and implementation + * Martin Oberhuber (Wind River) - [303083] Split out the Spawner + *******************************************************************************/ +package org.eclipse.cdt.utils.spawner; + + +import java.io.File; +import java.io.IOException; + +import org.eclipse.cdt.internal.core.natives.CNativePlugin; +import org.eclipse.cdt.internal.core.natives.Messages; +import org.eclipse.cdt.utils.pty.PTY; + +/** + * @noextend This class is not intended to be subclassed by clients. + * @noinstantiate This class is not intended to be instantiated by clients. + */ +public class ProcessFactory { + + static private ProcessFactory instance; + private boolean hasSpawner; + private Runtime runtime; + + private ProcessFactory() { + hasSpawner = false; + String OS = System.getProperty("os.name").toLowerCase(); //$NON-NLS-1$ + runtime = Runtime.getRuntime(); + try { + // Spawner does not work for Windows 98 fallback + if (OS != null && OS.equals("windows 98")) { //$NON-NLS-1$ + hasSpawner = false; + } else { + System.loadLibrary("spawner"); //$NON-NLS-1$ + hasSpawner = true; + } + } catch (SecurityException e) { + e.printStackTrace(); + } catch (UnsatisfiedLinkError e) { + CNativePlugin.log(e.getMessage()); + } + } + + public static ProcessFactory getFactory() { + if (instance == null) + instance = new ProcessFactory(); + return instance; + } + + public Process exec(String cmd) throws IOException { + if (hasSpawner) + return new Spawner(cmd); + return runtime.exec(cmd); + } + + public Process exec(String[] cmdarray) throws IOException { + if (hasSpawner) + return new Spawner(cmdarray); + return runtime.exec(cmdarray); + } + + public Process exec(String[] cmdarray, String[] envp) throws IOException { + if (hasSpawner) + return new Spawner(cmdarray, envp); + return runtime.exec(cmdarray, envp); + } + + public Process exec(String cmd, String[] envp) throws IOException { + if (hasSpawner) + return new Spawner(cmd, envp); + return runtime.exec(cmd, envp); + } + + public Process exec(String cmd, String[] envp, File dir) + throws IOException { + if (hasSpawner) + return new Spawner(cmd, envp, dir); + return runtime.exec(cmd, envp, dir); + } + + public Process exec(String cmdarray[], String[] envp, File dir) + throws IOException { + if (hasSpawner) + return new Spawner(cmdarray, envp, dir); + return runtime.exec(cmdarray, envp, dir); + } + + public Process exec(String cmdarray[], String[] envp, File dir, PTY pty) + throws IOException { + if (hasSpawner) + return new Spawner(cmdarray, envp, dir, pty); + throw new UnsupportedOperationException(Messages.Util_exception_cannotCreatePty); + } +} |