| // Win32Process.java - Subclass of Process for Win32 systems. |
| |
| /* Copyright (C) 2002, 2003 Free Software Foundation |
| |
| This file is part of libgcj. |
| |
| This software is copyrighted work licensed under the terms of the |
| Libgcj License. Please consult the file "LIBGCJ_LICENSE" for |
| details. */ |
| |
| package java.lang; |
| |
| import java.io.File; |
| import java.io.InputStream; |
| import java.io.OutputStream; |
| import java.io.IOException; |
| |
| /** |
| * @author Adam Megacz |
| * @date Feb 24, 2002 |
| */ |
| |
| // This is entirely internal to our implementation. |
| |
| // This file is copied to `ConcreteProcess.java' before compilation. |
| // Hence the class name apparently does not match the file name. |
| final class ConcreteProcess extends Process |
| { |
| public native void destroy (); |
| |
| public int exitValue () |
| { |
| if (! hasExited ()) |
| throw new IllegalThreadStateException ("Process has not exited"); |
| |
| return exitCode; |
| } |
| |
| public InputStream getErrorStream () |
| { |
| return errorStream; |
| } |
| |
| public InputStream getInputStream () |
| { |
| return inputStream; |
| } |
| |
| public OutputStream getOutputStream () |
| { |
| return outputStream; |
| } |
| |
| public native int waitFor () throws InterruptedException; |
| |
| public ConcreteProcess (String[] progarray, |
| String[] envp, |
| File dir) |
| throws IOException |
| { |
| for (int i = 0; i < progarray.length; i++) |
| { |
| String s = progarray[i]; |
| |
| if ( (s.indexOf (' ') >= 0) || (s.indexOf ('\t') >= 0)) |
| progarray[i] = "\"" + s + "\""; |
| } |
| |
| startProcess (progarray, envp, dir); |
| } |
| |
| // The standard streams (stdin, stdout and stderr, respectively) |
| // of the child as seen by the parent process. |
| private OutputStream outputStream; |
| private InputStream inputStream; |
| private InputStream errorStream; |
| |
| // Handle to the child process - cast to HANDLE before use. |
| private int procHandle; |
| |
| // Exit code of the child if it has exited. |
| private int exitCode; |
| |
| private native boolean hasExited (); |
| private native void startProcess (String[] progarray, |
| String[] envp, |
| File dir) |
| throws IOException; |
| private native void cleanup (); |
| } |