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
This commit is contained in:
parent
3f3e5a9ade
commit
1611915067
@ -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.
|
||||
|
Binary file not shown.
Binary file not shown.
@ -255,6 +255,7 @@ extern "Java"
|
||||
class VirtualMachineError;
|
||||
class Void;
|
||||
class Win32Process;
|
||||
class Win32Process$EOFInputStream;
|
||||
namespace annotation
|
||||
{
|
||||
class Annotation;
|
||||
|
23
libjava/java/lang/Win32Process$EOFInputStream.h
Normal file
23
libjava/java/lang/Win32Process$EOFInputStream.h
Normal file
@ -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__
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user