* java/lang/natPosixProcess.cc (startProcess): Implement standard
authorbothner <bothner@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 29 Feb 2004 19:14:20 +0000 (19:14 +0000)
committerbothner <bothner@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 29 Feb 2004 19:14:20 +0000 (19:14 +0000)
streams using FileChannelImpl, not FileDescriptor.
* java/lang/natWin32Process.cc (startProcess):  Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@78664 138bc75d-0d04-0410-961f-82ee72b054a4

libjava/java/lang/natPosixProcess.cc
libjava/java/lang/natWin32Process.cc

index a6dfc1a..644c0a1 100644 (file)
@@ -32,11 +32,14 @@ details.  */
 #include <java/lang/Thread.h>
 #include <java/io/File.h>
 #include <java/io/FileDescriptor.h>
+#include <gnu/java/nio/channels/FileChannelImpl.h>
 #include <java/io/FileInputStream.h>
 #include <java/io/FileOutputStream.h>
 #include <java/io/IOException.h>
 #include <java/lang/OutOfMemoryError.h>
 
+using gnu::java::nio::channels::FileChannelImpl;
+
 extern char **environ;
 
 void
@@ -187,9 +190,9 @@ java::lang::ConcreteProcess::startProcess (jstringArray progarray,
       // We create the streams before forking.  Otherwise if we had an
       // error while creating the streams we would have run the child
       // with no way to communicate with it.
-      errorStream = new FileInputStream (new FileDescriptor (errp[0]));
-      inputStream = new FileInputStream (new FileDescriptor (inp[0]));
-      outputStream = new FileOutputStream (new FileDescriptor (outp[1]));
+      errorStream = new FileInputStream (new FileChannelImpl(errp[0], FileChannelImpl::READ));
+      inputStream = new FileInputStream (new FileChannelImpl(inp[0], FileChannelImpl::READ));
+      outputStream = new FileOutputStream (new FileChannelImpl(outp[0], FileChannelImpl::WRITE));
 
       // We don't use vfork() because that would cause the local
       // environment to be set by the child.
index 7337ab3..3c1a4f0 100644 (file)
@@ -25,6 +25,9 @@ details.  */
 #include <java/io/FileOutputStream.h>
 #include <java/io/IOException.h>
 #include <java/lang/OutOfMemoryError.h>
+#include <gnu/java/nio/channels/FileChannelImpl.h>
+
+using gnu::java::nio::channels::FileChannelImpl;
 
 void
 java::lang::ConcreteProcess::cleanup (void)
@@ -282,12 +285,15 @@ java::lang::ConcreteProcess::startProcess (jstringArray progarray,
       ChildProcessPipe aChildStdOut(ChildProcessPipe::OUTPUT);
       ChildProcessPipe aChildStdErr(ChildProcessPipe::OUTPUT);
 
-      outputStream = new FileOutputStream (new FileDescriptor (
-                           (jint) aChildStdIn.getParentHandle ()));
-      inputStream = new FileInputStream (new FileDescriptor (
-                           (jint) aChildStdOut.getParentHandle ()));
-      errorStream = new FileInputStream (new FileDescriptor (
-                           (jint) aChildStdErr.getParentHandle ()));
+      outputStream = new FileOutputStream (new FileChannelImpl (
+                           (jint) aChildStdIn.getParentHandle (),
+                          FileChannelImpl::WRITE));
+      inputStream = new FileInputStream (new FileChannelImpl (
+                           (jint) aChildStdOut.getParentHandle (),
+                          FileChannelImpl::READ));
+      errorStream = new FileInputStream (new FileChannelImpl (
+                           (jint) aChildStdErr.getParentHandle (),
+                          FileChannelImpl::READ));
 
       // Now create the child process.
       PROCESS_INFORMATION pi;