diff options
author | Jesse Rosenstock <jmr@ugcs.caltech.edu> | 2002-08-14 01:07:59 +0000 |
---|---|---|
committer | Tom Tromey <tromey@gcc.gnu.org> | 2002-08-14 01:07:59 +0000 |
commit | eb812b2c153b214cdfd54c4a9b9cf4a05d5aed5d (patch) | |
tree | 8859acca9986ffae17e81f17067a13db5493f641 /libjava/java/lang/natPosixProcess.cc | |
parent | cf87d551b09fe04a5878a6ea481114d039b93496 (diff) | |
download | gcc-eb812b2c153b214cdfd54c4a9b9cf4a05d5aed5d.zip gcc-eb812b2c153b214cdfd54c4a9b9cf4a05d5aed5d.tar.gz gcc-eb812b2c153b214cdfd54c4a9b9cf4a05d5aed5d.tar.bz2 |
Fix for PR libgcj/7570 and PR libgcj/7578:
2002-08-13 Jesse Rosenstock <jmr@ugcs.caltech.edu>
Fix for PR libgcj/7570 and PR libgcj/7578:
* java/lang/natPosixProcess.cc: Include java/io/File.h.
(startProcess): Handle new `dir' argument.
* java/lang/Win32Process.java (ConcreteProcess): Added `dir'
argument.
* java/lang/PosixProcess.java (ConcreteProcess): Added `dir'
argument.
(startProcess): Likewise.
* java/lang/EcosProcess.java (ConcreteProcess): Added `dir'
argument.
* java/lang/Runtime.java (execInternal): Added `dir' argument.
(exec): Don't create new environment if ENV==null. Pass DIR to
execInternal.
* java/lang/natRuntime.cc: Include java/io/File.h.
(execInternal): Added `dir' argument.
From-SVN: r56268
Diffstat (limited to 'libjava/java/lang/natPosixProcess.cc')
-rw-r--r-- | libjava/java/lang/natPosixProcess.cc | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/libjava/java/lang/natPosixProcess.cc b/libjava/java/lang/natPosixProcess.cc index b480afb..a6c049b 100644 --- a/libjava/java/lang/natPosixProcess.cc +++ b/libjava/java/lang/natPosixProcess.cc @@ -30,6 +30,7 @@ details. */ #include <java/lang/InterruptedException.h> #include <java/lang/NullPointerException.h> #include <java/lang/Thread.h> +#include <java/io/File.h> #include <java/io/FileDescriptor.h> #include <java/io/FileInputStream.h> #include <java/io/FileOutputStream.h> @@ -116,7 +117,8 @@ myclose (int &fd) void java::lang::ConcreteProcess::startProcess (jstringArray progarray, - jstringArray envp) + jstringArray envp, + java::io::File *dir) { using namespace java::io; @@ -188,7 +190,7 @@ java::lang::ConcreteProcess::startProcess (jstringArray progarray, if (pid == 0) { - // Child process, so remap descriptors and exec. + // Child process, so remap descriptors, chdir and exec. if (envp) { @@ -229,6 +231,19 @@ java::lang::ConcreteProcess::startProcess (jstringArray progarray, close (outp[0]); close (outp[1]); close (msgp[0]); + + // Change directory. + if (dir != NULL) + { + // We don't care about leaking memory here; this process + // is about to terminate one way or another. + if (chdir (new_string (dir->getPath ())) != 0) + { + char c = errno; + write (msgp[1], &c, 1); + _exit (127); + } + } execvp (args[0], args); |