diff options
author | Mohan Embar <gnustuff@thisiscool.com> | 2007-03-07 18:05:39 +0000 |
---|---|---|
committer | Mohan Embar <membar@gcc.gnu.org> | 2007-03-07 18:05:39 +0000 |
commit | 1611915067138d5ab84a3225599281b68943172f (patch) | |
tree | 9946e4ef3a910462a687ebc5181b8f1776dcf5ac /libjava/java | |
parent | 3f3e5a9ade742e4cc257309cb1748d03601ad18c (diff) | |
download | gcc-1611915067138d5ab84a3225599281b68943172f.zip gcc-1611915067138d5ab84a3225599281b68943172f.tar.gz gcc-1611915067138d5ab84a3225599281b68943172f.tar.bz2 |
Win32Process.java: Added nested class EOFInputStream.
* 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.
From-SVN: r122668
Diffstat (limited to 'libjava/java')
-rw-r--r-- | libjava/java/lang/Win32Process$EOFInputStream.h | 23 | ||||
-rw-r--r-- | libjava/java/lang/Win32Process.java | 9 | ||||
-rw-r--r-- | libjava/java/lang/natWin32Process.cc | 22 |
3 files changed, 48 insertions, 6 deletions
diff --git a/libjava/java/lang/Win32Process$EOFInputStream.h b/libjava/java/lang/Win32Process$EOFInputStream.h new file mode 100644 index 0000000..b0224f3 --- /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 e817a0c..f22b548 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 c836b56..0e7f60d 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 |