
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __java_lang_PosixProcess__
#define __java_lang_PosixProcess__

#pragma interface

#include <java/lang/Process.h>
#include <gcj/array.h>


class java::lang::PosixProcess : public ::java::lang::Process
{

public:
  void destroy();
private:
  void nativeDestroy();
public:
  jint exitValue();
public: // actually package-private
  void processTerminationCleanup();
public:
  ::java::io::InputStream * getErrorStream();
  ::java::io::InputStream * getInputStream();
  ::java::io::OutputStream * getOutputStream();
  jint waitFor();
public: // actually package-private
  void spawn(::java::lang::PosixProcess$ProcessManager *);
private:
  void nativeSpawn();
public: // actually package-private
  PosixProcess(JArray< ::java::lang::String * > *, JArray< ::java::lang::String * > *, ::java::io::File *, jboolean);
  static ::java::lang::Object * access$0();
  static void access$1(::java::lang::PosixProcess$ProcessManager *);
private:
  JArray< ::java::lang::String * > * __attribute__((aligned(__alignof__( ::java::lang::Process)))) progarray;
  JArray< ::java::lang::String * > * envp;
  ::java::io::File * dir;
  jboolean redirect;
  ::java::lang::Throwable * exception;
public: // actually package-private
  jlong pid;
  static const jint STATE_WAITING_TO_START = 0;
  static const jint STATE_RUNNING = 1;
  static const jint STATE_TERMINATED = 2;
  jint state;
  jint status;
private:
  ::java::io::InputStream * errorStream;
  ::java::io::InputStream * inputStream;
  ::java::io::OutputStream * outputStream;
  ::java::io::InputStream * returnedErrorStream;
  ::java::io::InputStream * returnedInputStream;
  static ::java::lang::Object * queueLock;
  static ::java::lang::PosixProcess$ProcessManager * processManager;
public:
  static ::java::lang::Class class$;
};

#endif // __java_lang_PosixProcess__
