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-01-12 12:40:42 +0000
committerGravatar Marcel Hlopko <hlopko@google.com>2017-01-12 14:08:35 +0000
commitda20a73e6f8a8e4fa1ac15ee345d70ea92647e46 (patch)
treef5f24179f89f355e8a51d7668236c49679111fa3 /src/main/java/com/google/devtools/build/lib/windows/WindowsSubprocessFactory.java
parentc828053419d41bfe9377bcb5a01032c00800308a (diff)
Windows, JNI: arg for argv0 in nativeCreateProcess
Add a separate argument to nativeCreateProcess for argv[0] specifically, and another for the rest of the args. In a subsequent change I'll add code to compute the 8dot3 style short name of the argv[0] so we can use longer paths for executables in CreateProcessA than we normally could. This is the same approach as used in commit 44ecf9a0c7c25496a43f59f1c8f20df9527e12cb See https://github.com/bazelbuild/bazel/issues/2107 See https://github.com/bazelbuild/bazel/issues/2181 -- PiperOrigin-RevId: 144311562 MOS_MIGRATED_REVID=144311562
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.java20
1 files changed, 14 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 965a18672e..9f6f0eb565 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
@@ -18,9 +18,9 @@ import com.google.common.base.Charsets;
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 java.io.File;
import java.io.IOException;
+import java.util.List;
import java.util.Map;
import java.util.TreeMap;
@@ -38,22 +38,30 @@ public class WindowsSubprocessFactory implements Subprocess.Factory {
public Subprocess create(SubprocessBuilder builder) throws IOException {
WindowsJniLoader.loadJni();
- String commandLine = WindowsProcesses.quoteCommandLine(builder.getArgv());
+ List<String> argv = builder.getArgv();
+ String argv0 = WindowsProcesses.quoteCommandLine(argv.subList(0, 1));
+ String argvRest =
+ argv.size() > 1 ? WindowsProcesses.quoteCommandLine(argv.subList(1, argv.size())) : "";
byte[] env = builder.getEnv() == null ? null : convertEnvToNative(builder.getEnv());
String stdoutPath = getRedirectPath(builder.getStdout(), builder.getStdoutFile());
String stderrPath = getRedirectPath(builder.getStderr(), builder.getStderrFile());
- long nativeProcess = WindowsProcesses.nativeCreateProcess(
- commandLine, env, builder.getWorkingDirectory().getPath(), stdoutPath, stderrPath);
+ long nativeProcess =
+ WindowsProcesses.nativeCreateProcess(
+ argv0, argvRest, env, builder.getWorkingDirectory().getPath(), stdoutPath, stderrPath);
String error = WindowsProcesses.nativeProcessGetLastError(nativeProcess);
if (!error.isEmpty()) {
WindowsProcesses.nativeDeleteProcess(nativeProcess);
throw new IOException(error);
}
- return new WindowsSubprocess(nativeProcess, commandLine, stdoutPath != null,
- stderrPath != null, builder.getTimeoutMillis());
+ return new WindowsSubprocess(
+ nativeProcess,
+ argv0 + " " + argvRest,
+ stdoutPath != null,
+ stderrPath != null,
+ builder.getTimeoutMillis());
}
private String getRedirectPath(StreamAction action, File file) {