diff options
-rw-r--r-- | libjava/ChangeLog | 11 | ||||
-rw-r--r-- | libjava/classpath/lib/java/lang/Win32Process$EOFInputStream.class | bin | 0 -> 567 bytes | |||
-rw-r--r-- | libjava/classpath/lib/java/lang/Win32Process.class | bin | 1739 -> 1830 bytes | |||
-rw-r--r-- | libjava/gcj/javaprims.h | 1 | ||||
-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 |
7 files changed, 60 insertions, 6 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 10c39bf..47ad138 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 Binary files differnew file mode 100644 index 0000000..a43b1f1 --- /dev/null +++ b/libjava/classpath/lib/java/lang/Win32Process$EOFInputStream.class diff --git a/libjava/classpath/lib/java/lang/Win32Process.class b/libjava/classpath/lib/java/lang/Win32Process.class Binary files differindex ef70db7..200aaaa 100644 --- a/libjava/classpath/lib/java/lang/Win32Process.class +++ b/libjava/classpath/lib/java/lang/Win32Process.class diff --git a/libjava/gcj/javaprims.h b/libjava/gcj/javaprims.h index d7f3240..e4c29fe 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 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 |