diff options
author | Uwe Stieber | 2012-08-02 09:15:31 +0000 |
---|---|---|
committer | Uwe Stieber | 2012-08-02 09:16:10 +0000 |
commit | 3b4cfe1a2162e3ae0d03ee460813a8e08d17d0b8 (patch) | |
tree | 24397fd76214bc20d7eff5adc2030615570d1ff4 /target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core | |
parent | 143f3cb832305c323b88f112cf18b980fdde116f (diff) | |
download | org.eclipse.tcf-3b4cfe1a2162e3ae0d03ee460813a8e08d17d0b8.tar.gz org.eclipse.tcf-3b4cfe1a2162e3ae0d03ee460813a8e08d17d0b8.tar.xz org.eclipse.tcf-3b4cfe1a2162e3ae0d03ee460813a8e08d17d0b8.zip |
Fix Bug 386328 - Application output doesn't display correctly in the terminal
Diffstat (limited to 'target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core')
-rw-r--r-- | target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core/src/org/eclipse/tcf/te/tcf/launch/core/steps/LaunchProcessStep.java | 33 |
1 files changed, 32 insertions, 1 deletions
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core/src/org/eclipse/tcf/te/tcf/launch/core/steps/LaunchProcessStep.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core/src/org/eclipse/tcf/te/tcf/launch/core/steps/LaunchProcessStep.java index b7454f9e8..b4c6cffbd 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core/src/org/eclipse/tcf/te/tcf/launch/core/steps/LaunchProcessStep.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core/src/org/eclipse/tcf/te/tcf/launch/core/steps/LaunchProcessStep.java @@ -11,6 +11,7 @@ package org.eclipse.tcf.te.tcf.launch.core.steps; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.atomic.AtomicBoolean; import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.CoreException; @@ -19,6 +20,8 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.debug.core.ILaunchManager; import org.eclipse.tcf.protocol.IChannel; +import org.eclipse.tcf.protocol.IPeer; +import org.eclipse.tcf.protocol.Protocol; import org.eclipse.tcf.services.IProcesses; import org.eclipse.tcf.te.core.utils.text.StringUtil; import org.eclipse.tcf.te.launch.core.persistence.DefaultPersistenceDelegate; @@ -26,10 +29,14 @@ import org.eclipse.tcf.te.runtime.callback.Callback; import org.eclipse.tcf.te.runtime.interfaces.callback.ICallback; import org.eclipse.tcf.te.runtime.interfaces.properties.IPropertiesContainer; import org.eclipse.tcf.te.runtime.properties.PropertiesContainer; +import org.eclipse.tcf.te.runtime.services.interfaces.constants.ILineSeparatorConstants; import org.eclipse.tcf.te.runtime.services.interfaces.constants.ITerminalsConnectorConstants; import org.eclipse.tcf.te.runtime.stepper.StepperAttributeUtil; import org.eclipse.tcf.te.runtime.stepper.interfaces.IFullQualifiedId; import org.eclipse.tcf.te.runtime.stepper.interfaces.IStepContext; +import org.eclipse.tcf.te.runtime.utils.Host; +import org.eclipse.tcf.te.runtime.utils.net.IPAddressUtil; +import org.eclipse.tcf.te.tcf.core.interfaces.ITransportTypes; import org.eclipse.tcf.te.tcf.launch.core.activator.CoreBundleActivator; import org.eclipse.tcf.te.tcf.launch.core.interfaces.ICommonTCFLaunchAttributes; import org.eclipse.tcf.te.tcf.launch.core.interfaces.IRemoteAppLaunchAttributes; @@ -105,7 +112,31 @@ public class LaunchProcessStep extends AbstractTcfLaunchStep { // Launch the process IPropertiesContainer container = new PropertiesContainer(); container.setProperties(launchAttributes); - launcher.launch(getActivePeerModel(fullQualifiedId, data).getPeer(), container, new Callback(callback) { + + final IPeer peer = getActivePeerModel(fullQualifiedId, data).getPeer(); + + // Determine if the launch is on local host. If yes, we can preset the + // line ending character. + final AtomicBoolean isLocalhost = new AtomicBoolean(); + + Runnable runnable = new Runnable() { + @Override + public void run() { + if (ITransportTypes.TRANSPORT_TYPE_TCP.equals(peer.getTransportName()) + || ITransportTypes.TRANSPORT_TYPE_SSL.equals(peer.getTransportName())) { + isLocalhost.set(IPAddressUtil.getInstance().isLocalHost(peer.getAttributes().get(IPeer.ATTR_IP_HOST))); + } + } + }; + + if (Protocol.isDispatchThread()) runnable.run(); + else Protocol.invokeAndWait(runnable); + + if (isLocalhost.get()) { + container.setProperty(ITerminalsConnectorConstants.PROP_LINE_SEPARATOR, Host.isWindowsHost() ? ILineSeparatorConstants.LINE_SEPARATOR_CRLF : ILineSeparatorConstants.LINE_SEPARATOR_LF); + } + + launcher.launch(peer, container, new Callback(callback) { @Override protected void internalDone(Object caller, IStatus status) { Object result = getResult(); |