/*
- * Copyright (c) 1999, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1999, 2023, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
/* Get the path to the java binary, which is in a known position relative
* to our current position, which is in argv[0]. */
- if (getJavaPath(argv[argi++], java, RELATIVE_DEPTH) != 0) {
+ int error = getJavaPath(argv[argi++], java, RELATIVE_DEPTH);
+#ifdef __linux__
+ /* Try to read the symbolic link to the current binary
+ * if the java path can not be resolved from argv[0]. */
+ if (error != 0) {
+ error = getJavaPath("/proc/self/exe", java, RELATIVE_DEPTH);
+ }
+#endif
+
+ if (error != 0) {
errorExit(errno, MISSING_JAVA_MSG);
}
alen = (argc + 2) * (sizeof (const char *));
/*
- * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2017, 2023, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
/*
* @test
- * @bug 8175000
+ * @bug 8175000 8314491
* @summary test jexec
+ * @requires os.family == "linux"
* @build TestHelper
* @run main Jexec
*/
import java.io.File;
import java.io.IOException;
+import java.nio.file.Path;
public class Jexec extends TestHelper {
private final File testJar;
}
public static void main(String... args) throws Exception {
- // linux is the only supported platform, give the others a pass
- if (!isLinux) {
- System.err.println("Warning: unsupported platform test passes vacuously");
- return;
- }
- // ok to run the test now
Jexec t = new Jexec();
t.run(null);
}
- @Test
- void jexec() throws Exception {
- TestResult tr = doExec(jexecCmd.getAbsolutePath(),
- testJar.getAbsolutePath(), message);
+ private void runTest(String... cmds) throws Exception {
+ TestResult tr = doExec(cmds);
if (!tr.isOK()) {
System.err.println(tr);
throw new Exception("incorrect exit value");
throw new Exception("expected message \'" + message + "\' not found");
}
}
+
+ @Test
+ void jexec() throws Exception {
+ runTest(jexecCmd.getAbsolutePath(),
+ testJar.getAbsolutePath(), message);
+ }
+
+ @Test
+ void jexecInPath() throws Exception {
+ Path jexec = Path.of(jexecCmd.getAbsolutePath());
+ runTest("/bin/sh", "-c",
+ String.format("PATH=%s ; jexec %s '%s'",jexec.getParent(), testJar.getAbsolutePath(), message));
+ }
}