aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/windows/WindowsSubprocessFactory.java
diff options
context:
space:
mode:
authorGravatar Laszlo Csomor <laszlocsomor@google.com>2017-06-30 16:22:41 +0200
committerGravatar Marcel Hlopko <hlopko@google.com>2017-07-03 09:05:27 +0200
commit13f9226911981339225456f38f74d04c7bcbd92b (patch)
treee1f5fbbc470695ad6a28bc3cc19a26e233f11e43 /src/main/java/com/google/devtools/build/lib/windows/WindowsSubprocessFactory.java
parent59a0e4f10bf037dcd4f257b2e21573fa1b690e93 (diff)
Windows, JNI: move around sources
Move the Java JNI sources to a separate package: c.g.devtools.build.lib.windows.jni and c.g.devtools.build.lib.windows.runfiles. Make the native method declarations private, create public wrapper methods for them that ensure that the JNI library is loaded. Split the C++ JNI source processes.cc into two parts (processes-jni.cc and file-jni.cc), extract common functionality to jni-util.{h,cc}. This change preparse the code for Android rule support on Windows, specifically it lets the Android BusyBox use the file JNI library so it can create junctions on Windows to work around long path issues when calling external tools. See https://github.com/bazelbuild/bazel/issues/3264 Change-Id: I7f1a746d73f822ae419d11b893a91f4eb45d64da PiperOrigin-RevId: 160643355
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/windows/WindowsSubprocessFactory.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/windows/WindowsSubprocessFactory.java11
1 files changed, 5 insertions, 6 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/windows/WindowsSubprocessFactory.java b/src/main/java/com/google/devtools/build/lib/windows/WindowsSubprocessFactory.java
index e85325dcaa..e398a3b195 100644
--- a/src/main/java/com/google/devtools/build/lib/windows/WindowsSubprocessFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/windows/WindowsSubprocessFactory.java
@@ -19,6 +19,7 @@ import com.google.devtools.build.lib.shell.Subprocess;
import com.google.devtools.build.lib.shell.SubprocessBuilder;
import com.google.devtools.build.lib.shell.SubprocessBuilder.StreamAction;
import com.google.devtools.build.lib.vfs.PathFragment;
+import com.google.devtools.build.lib.windows.jni.WindowsProcesses;
import java.io.File;
import java.io.IOException;
import java.util.List;
@@ -37,11 +38,9 @@ public class WindowsSubprocessFactory implements Subprocess.Factory {
@Override
public Subprocess create(SubprocessBuilder builder) throws IOException {
- WindowsJniLoader.loadJni();
-
List<String> argv = builder.getArgv();
- // DO NOT quote argv0, nativeCreateProcess will do it for us.
+ // DO NOT quote argv0, createProcess will do it for us.
String argv0 = processArgv0(argv.get(0));
String argvRest =
argv.size() > 1 ? WindowsProcesses.quoteCommandLine(argv.subList(1, argv.size())) : "";
@@ -51,11 +50,11 @@ public class WindowsSubprocessFactory implements Subprocess.Factory {
String stderrPath = getRedirectPath(builder.getStderr(), builder.getStderrFile());
long nativeProcess =
- WindowsProcesses.nativeCreateProcess(
+ WindowsProcesses.createProcess(
argv0, argvRest, env, builder.getWorkingDirectory().getPath(), stdoutPath, stderrPath);
- String error = WindowsProcesses.nativeProcessGetLastError(nativeProcess);
+ String error = WindowsProcesses.processGetLastError(nativeProcess);
if (!error.isEmpty()) {
- WindowsProcesses.nativeDeleteProcess(nativeProcess);
+ WindowsProcesses.deleteProcess(nativeProcess);
throw new IOException(error);
}