Sophie

Sophie

distrib > Mageia > 2 > i586 > by-pkgid > 8127d46c2fc2c2c6c24705e24dcbe88b > files > 8

eclipse-cdt-7.0.1-2.mga1.src.rpm

### Eclipse Workspace Patch 1.0
#P org.eclipse.cdt.core
Index: utils/org/eclipse/cdt/utils/pty/PTYInputStream.java
===================================================================
RCS file: /cvsroot/tools/org.eclipse.cdt/all/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/pty/PTYInputStream.java,v
retrieving revision 1.13
diff -u -r1.13 PTYInputStream.java
--- utils/org/eclipse/cdt/utils/pty/PTYInputStream.java	3 Jun 2010 17:36:01 -0000	1.13
+++ utils/org/eclipse/cdt/utils/pty/PTYInputStream.java	17 Dec 2010 22:18:06 -0000
@@ -14,7 +14,6 @@
 import java.io.IOException;
 import java.io.InputStream;
 
-import org.eclipse.cdt.core.CCorePlugin;
 import org.eclipse.cdt.utils.pty.PTY.MasterFD;
 
 class PTYInputStream extends InputStream {
@@ -74,9 +73,10 @@
 	public void close() throws IOException {
 		if (master.getFD() == -1)
 			return;
-		int status = close0(master.getFD());
-		if (status == -1)
-			throw new IOException(CCorePlugin.getResourceString("Util.exception.closeError")); //$NON-NLS-1$
+		close0(master.getFD());
+		// ignore error on close - see bug 286162
+//		if (status == -1)
+//			throw new IOException(CCorePlugin.getResourceString("Util.exception.closeError")); //$NON-NLS-1$
 		master.setFD(-1);
 	}
 
Index: utils/org/eclipse/cdt/utils/spawner/Spawner.java
===================================================================
RCS file: /cvsroot/tools/org.eclipse.cdt/all/org.eclipse.cdt.core/utils/org/eclipse/cdt/utils/spawner/Spawner.java,v
retrieving revision 1.21
diff -u -r1.21 Spawner.java
--- utils/org/eclipse/cdt/utils/spawner/Spawner.java	30 Apr 2010 21:06:54 -0000	1.21
+++ utils/org/eclipse/cdt/utils/spawner/Spawner.java	17 Dec 2010 22:18:06 -0000
@@ -66,6 +66,7 @@
 	OutputStream out;
 	InputStream in;
 	InputStream err;
+	private PTY fPty;
 
 	public Spawner(String command, boolean bNoRedirect) throws IOException {
 		StringTokenizer tokenizer = new StringTokenizer(command);
@@ -92,6 +93,7 @@
 		String dirpath = "."; //$NON-NLS-1$
 		if (dir != null)
 			dirpath = dir.getAbsolutePath();
+		fPty = pty;
 		exec_pty(cmdarray, envp, dirpath, pty);
 	}
 	/**
@@ -144,8 +146,13 @@
 	 **/
 	@Override
 	public InputStream getInputStream() {
-		if(null == in)
-			in = new SpawnerInputStream(fChannels[1]);
+		if(null == in) {
+			if (fPty != null) {
+				in = fPty.getInputStream();
+			} else {
+				in = new SpawnerInputStream(fChannels[1]);
+			}
+		}
 		return in;
 	}
 
@@ -154,8 +161,13 @@
 	 **/
 	@Override
 	public OutputStream getOutputStream() {
-		if(null == out)
-			out = new SpawnerOutputStream(fChannels[0]);
+		if(null == out) {
+			if (fPty != null) {
+				out = fPty.getOutputStream();
+			} else {
+				out = new SpawnerOutputStream(fChannels[0]);
+			}
+		}
 		return out;
 	}
 
@@ -165,7 +177,34 @@
 	@Override
 	public InputStream getErrorStream() {
 		if(null == err)
-			err = new SpawnerInputStream(fChannels[2]);
+			if (fPty != null && !fPty.isConsole()) {
+				// If PTY is used and it's not in "Console" mode, then stderr is
+				// redirected to the PTY's output stream.  Therefore, return a 
+				// dummy stream for error stream.
+				err = new InputStream() {
+					boolean fClosed = false;
+					@Override
+					public synchronized int read() throws IOException {
+						while (!fClosed) {
+							try {
+								wait();
+							} catch (InterruptedException e) {}
+						}
+						return -1;
+					}
+					
+					@Override
+					public void close() throws IOException {
+						synchronized(this) {
+							fClosed = true;
+							notifyAll();
+						}
+						super.close();
+					}
+				};
+			} else {
+				err = new SpawnerInputStream(fChannels[2]);
+			}
 		return err;
 	}
 
@@ -179,12 +218,11 @@
 		}
 		try {
 			if(null == err)
-				((SpawnerInputStream)getErrorStream()).close();
+				getErrorStream().close();
 			if(null == in)
-				((SpawnerInputStream)getInputStream()).close();
+				getInputStream().close();
 			if(null == out)
-				((SpawnerOutputStream)getOutputStream()).close();
-			
+				getOutputStream().close();
 		} catch (IOException e) {
 		}
 		return status;
@@ -211,11 +249,11 @@
 		// Close the streams on this side.
 		try {
 			if(null == err)
-				((SpawnerInputStream)getErrorStream()).close();
+				getErrorStream().close();
 			if(null == in)
-				((SpawnerInputStream)getInputStream()).close();
+				getInputStream().close();
 			if(null == out)
-				((SpawnerOutputStream)getOutputStream()).close();
+				getOutputStream().close();
 		} catch (IOException e) {
 		}
 		// Grace before using the heavy gone.