Win32Process.java 2.11 KB
Newer Older
1 2
// Win32Process.java - Subclass of Process for Win32 systems.

3
/* Copyright (C) 2002, 2003  Free Software Foundation
4 5 6 7 8 9 10 11 12

   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;

13
import java.io.File;
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
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
{
29 30
  public native void destroy ();

31 32
  public int exitValue ()
  {
33 34 35 36
    if (! hasExited ())
      throw new IllegalThreadStateException ("Process has not exited");

    return exitCode;
37 38 39 40
  }

  public InputStream getErrorStream ()
  {
41
    return errorStream;
42 43 44 45
  }

  public InputStream getInputStream ()
  {
46
    return inputStream;
47 48 49 50
  }

  public OutputStream getOutputStream ()
  {
51
    return outputStream;
52 53
  }

54 55
  public native int waitFor () throws InterruptedException;

56 57 58 59
  public ConcreteProcess (String[] progarray,
                          String[] envp,
                          File dir)
    throws IOException
60
  {
61 62 63 64 65 66 67 68
    for (int i = 0; i < progarray.length; i++)
      {
        String s = progarray[i];

        if ( (s.indexOf (' ') >= 0) || (s.indexOf ('\t') >= 0))
          progarray[i] = "\"" + s + "\"";
      }

69
    startProcess (progarray, envp, dir);
70 71
  }

72 73 74 75 76 77 78 79 80 81 82
  // 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;
83 84 85 86 87 88 89

  private native boolean hasExited ();
  private native void startProcess (String[] progarray,
           String[] envp,
           File dir)
    throws IOException;
  private native void cleanup ();
90
}