aboutsummaryrefslogtreecommitdiff
path: root/libjava
diff options
context:
space:
mode:
authorMohan Embar <gnustuff@thisiscool.com>2007-03-07 18:05:39 +0000
committerMohan Embar <gnustuff@thisiscool.com>2007-03-07 18:05:39 +0000
commit172175608b1edd71d424fba21adbf6021f093355 (patch)
tree9946e4ef3a910462a687ebc5181b8f1776dcf5ac /libjava
parent6661e89f054c5039b8c173a77246e8f3de834862 (diff)
* java/lang/Win32Process.java: Added nested class EOFInputStream.
* java/lang/natWin32Process.cc (ChildProcessPipe): Added DUMMY enum and implementation. (startProcess): Use redirect flag. * classpath/lib/java/lang/Win32Process.class: Regenerated. * classpath/lib/java/lang/Win32Process$EOFInputStream.class: New. * gcj/javaprims.h: Regenerated. * java/lang/Win32Process$EOFInputStream.h: New. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@122668 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava')
-rw-r--r--libjava/ChangeLog11
-rw-r--r--libjava/classpath/lib/java/lang/Win32Process$EOFInputStream.classbin0 -> 567 bytes
-rw-r--r--libjava/classpath/lib/java/lang/Win32Process.classbin1739 -> 1830 bytes
-rw-r--r--libjava/gcj/javaprims.h1
-rw-r--r--libjava/java/lang/Win32Process$EOFInputStream.h23
-rw-r--r--libjava/java/lang/Win32Process.java9
-rw-r--r--libjava/java/lang/natWin32Process.cc22
7 files changed, 60 insertions, 6 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 10c39bf5e71..47ad1380112 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,14 @@
+2007-03-07 Mohan Embar <gnustuff@thisiscool.com>
+
+ * java/lang/Win32Process.java: Added nested class EOFInputStream.
+ * java/lang/natWin32Process.cc (ChildProcessPipe): Added DUMMY
+ enum and implementation.
+ (startProcess): Use redirect flag.
+ * classpath/lib/java/lang/Win32Process.class: Regenerated.
+ * classpath/lib/java/lang/Win32Process$EOFInputStream.class: New.
+ * gcj/javaprims.h: Regenerated.
+ * java/lang/Win32Process$EOFInputStream.h: New.
+
2007-03-07 Andrew Haley <aph@redhat.com>
* libgcj_bc.c (JvRunMainName): Declare.
diff --git a/libjava/classpath/lib/java/lang/Win32Process$EOFInputStream.class b/libjava/classpath/lib/java/lang/Win32Process$EOFInputStream.class
new file mode 100644
index 00000000000..a43b1f155bd
--- /dev/null
+++ b/libjava/classpath/lib/java/lang/Win32Process$EOFInputStream.class
Binary files differ
diff --git a/libjava/classpath/lib/java/lang/Win32Process.class b/libjava/classpath/lib/java/lang/Win32Process.class
index ef70db74131..200aaaac5e1 100644
--- a/libjava/classpath/lib/java/lang/Win32Process.class
+++ b/libjava/classpath/lib/java/lang/Win32Process.class
Binary files differ
diff --git a/libjava/gcj/javaprims.h b/libjava/gcj/javaprims.h
index d7f32409279..e4c29fe6138 100644
--- a/libjava/gcj/javaprims.h
+++ b/libjava/gcj/javaprims.h
@@ -255,6 +255,7 @@ extern "Java"
class VirtualMachineError;
class Void;
class Win32Process;
+ class Win32Process$EOFInputStream;
namespace annotation
{
class Annotation;
diff --git a/libjava/java/lang/Win32Process$EOFInputStream.h b/libjava/java/lang/Win32Process$EOFInputStream.h
new file mode 100644
index 00000000000..b0224f332f7
--- /dev/null
+++ b/libjava/java/lang/Win32Process$EOFInputStream.h
@@ -0,0 +1,23 @@
+
+// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-
+
+#ifndef __java_lang_Win32Process$EOFInputStream__
+#define __java_lang_Win32Process$EOFInputStream__
+
+#pragma interface
+
+#include <java/io/InputStream.h>
+
+class java::lang::Win32Process$EOFInputStream : public ::java::io::InputStream
+{
+
+ Win32Process$EOFInputStream();
+public:
+ virtual jint read();
+public: // actually package-private
+ static ::java::lang::Win32Process$EOFInputStream * instance;
+public:
+ static ::java::lang::Class class$;
+};
+
+#endif // __java_lang_Win32Process$EOFInputStream__
diff --git a/libjava/java/lang/Win32Process.java b/libjava/java/lang/Win32Process.java
index e817a0c9090..f22b548820f 100644
--- a/libjava/java/lang/Win32Process.java
+++ b/libjava/java/lang/Win32Process.java
@@ -85,4 +85,13 @@ final class Win32Process extends Process
boolean redirect)
throws IOException;
private native void cleanup ();
+
+ private static class EOFInputStream extends InputStream
+ {
+ static EOFInputStream instance = new EOFInputStream();
+ public int read()
+ {
+ return -1;
+ }
+ }
}
diff --git a/libjava/java/lang/natWin32Process.cc b/libjava/java/lang/natWin32Process.cc
index c836b5630f5..0e7f60d6cad 100644
--- a/libjava/java/lang/natWin32Process.cc
+++ b/libjava/java/lang/natWin32Process.cc
@@ -25,6 +25,7 @@ details. */
#include <java/io/FileOutputStream.h>
#include <java/io/IOException.h>
#include <java/lang/OutOfMemoryError.h>
+#include <java/lang/Win32Process$EOFInputStream.h>
#include <gnu/java/nio/channels/FileChannelImpl.h>
using gnu::java::nio::channels::FileChannelImpl;
@@ -146,7 +147,7 @@ class ChildProcessPipe
public:
// Indicates from the child process' point of view
// whether the pipe is for reading or writing.
- enum EType {INPUT, OUTPUT};
+ enum EType {INPUT, OUTPUT, DUMMY};
ChildProcessPipe(EType eType);
~ChildProcessPipe();
@@ -163,8 +164,11 @@ private:
};
ChildProcessPipe::ChildProcessPipe(EType eType):
- m_eType(eType)
+ m_eType(eType), m_hRead(0), m_hWrite(0)
{
+ if (eType == DUMMY)
+ return;
+
SECURITY_ATTRIBUTES sAttrs;
// Explicitly allow the handles to the pipes to be inherited.
@@ -195,7 +199,8 @@ ChildProcessPipe::~ChildProcessPipe()
// Close the parent end of the pipe. This
// destructor is called after the child process
// has been spawned.
- CloseHandle(getChildHandle());
+ if (m_eType != DUMMY)
+ CloseHandle(getChildHandle());
}
HANDLE ChildProcessPipe::getParentHandle()
@@ -284,7 +289,8 @@ java::lang::Win32Process::startProcess (jstringArray progarray,
// on each of standard streams.
ChildProcessPipe aChildStdIn(ChildProcessPipe::INPUT);
ChildProcessPipe aChildStdOut(ChildProcessPipe::OUTPUT);
- ChildProcessPipe aChildStdErr(ChildProcessPipe::OUTPUT);
+ ChildProcessPipe aChildStdErr(redirect ? ChildProcessPipe::DUMMY
+ : ChildProcessPipe::OUTPUT);
outputStream = new FileOutputStream (new FileChannelImpl (
(jint) aChildStdIn.getParentHandle (),
@@ -292,7 +298,10 @@ java::lang::Win32Process::startProcess (jstringArray progarray,
inputStream = new FileInputStream (new FileChannelImpl (
(jint) aChildStdOut.getParentHandle (),
FileChannelImpl::READ));
- errorStream = new FileInputStream (new FileChannelImpl (
+ if (redirect)
+ errorStream = Win32Process$EOFInputStream::instance;
+ else
+ errorStream = new FileInputStream (new FileChannelImpl (
(jint) aChildStdErr.getParentHandle (),
FileChannelImpl::READ));
@@ -310,7 +319,8 @@ java::lang::Win32Process::startProcess (jstringArray progarray,
si.hStdInput = aChildStdIn.getChildHandle();
si.hStdOutput = aChildStdOut.getChildHandle();
- si.hStdError = aChildStdErr.getChildHandle();
+ si.hStdError = redirect ? aChildStdOut.getChildHandle()
+ : aChildStdErr.getChildHandle();
// Spawn the process. CREATE_NO_WINDOW only applies when
// starting a console application; it suppresses the