diff --git a/src/java.base/macosx/native/libjli/java_md_macosx.m b/src/java.base/macosx/native/libjli/java_md_macosx.m index 279a7abef1ee4..75be568e32524 100644 --- a/src/java.base/macosx/native/libjli/java_md_macosx.m +++ b/src/java.base/macosx/native/libjli/java_md_macosx.m @@ -361,7 +361,8 @@ static void MacOSXStartup(int argc, char *argv[]) { CreateExecutionEnvironment(int *pargc, char ***pargv, char jrepath[], jint so_jrepath, char jvmpath[], jint so_jvmpath, - char jvmcfg[], jint so_jvmcfg) { + char jvmcfg[], jint so_jvmcfg, + char **orig_argv) { /* Compute/set the name of the executable */ SetExecname(*pargv); diff --git a/src/java.base/share/native/launcher/main.c b/src/java.base/share/native/launcher/main.c index d3898d7adc634..7dd78fa8dc55c 100644 --- a/src/java.base/share/native/launcher/main.c +++ b/src/java.base/share/native/launcher/main.c @@ -49,6 +49,7 @@ WinMain(HINSTANCE inst, HINSTANCE previnst, LPSTR cmdline, int cmdshow) int jargc; char** jargv; const jboolean const_javaw = JNI_TRUE; + char** argv = NULL; __initenv = _environ; @@ -171,5 +172,6 @@ main(int argc, char **argv) (const_progname != NULL) ? const_progname : *margv, (const_launcher != NULL) ? const_launcher : *margv, jargc > 0, - const_cpwildcard, const_javaw, 0); + const_cpwildcard, const_javaw, 0, + argv); } diff --git a/src/java.base/share/native/libjli/args.c b/src/java.base/share/native/libjli/args.c index 17f8c5cfd5657..28e8cc7df6bd8 100644 --- a/src/java.base/share/native/libjli/args.c +++ b/src/java.base/share/native/libjli/args.c @@ -86,15 +86,7 @@ static jboolean expand(JLI_List args, const char *str, const char *var_name); JNIEXPORT void JNICALL JLI_InitArgProcessing(jboolean hasJavaArgs, jboolean disableArgFile) { - // No expansion for relaunch - if (argsCount != 1) { - relaunch = JNI_TRUE; - stopExpansion = JNI_TRUE; - argsCount = 1; - } else { - stopExpansion = disableArgFile; - } - + stopExpansion = disableArgFile; expectingNoDashArg = JNI_FALSE; // for tools, this value remains 0 all the time. @@ -472,10 +464,6 @@ JLI_AddArgsFromEnvVar(JLI_List args, const char *var_name) { return JNI_FALSE; } - if (relaunch) { - return JNI_FALSE; - } - if (NULL == env) { return JNI_FALSE; } diff --git a/src/java.base/share/native/libjli/java.c b/src/java.base/share/native/libjli/java.c index 6370cf7b7b6b0..9a70ef027b73b 100644 --- a/src/java.base/share/native/libjli/java.c +++ b/src/java.base/share/native/libjli/java.c @@ -234,7 +234,8 @@ JLI_Launch(int argc, char ** argv, /* main argc, argv */ jboolean javaargs, /* JAVA_ARGS */ jboolean cpwildcard, /* classpath wildcard*/ jboolean javaw, /* windows-only javaw */ - jint ergo /* unused */ + jint ergo, /* unused */ + char **orig_argv /* original argv as it was passed to main */ ) { int mode = LM_UNKNOWN; @@ -283,7 +284,8 @@ JLI_Launch(int argc, char ** argv, /* main argc, argv */ CreateExecutionEnvironment(&argc, &argv, jrepath, sizeof(jrepath), jvmpath, sizeof(jvmpath), - jvmcfg, sizeof(jvmcfg)); + jvmcfg, sizeof(jvmcfg), + orig_argv); ifn.CreateJavaVM = 0; ifn.GetDefaultJavaVMInitArgs = 0; diff --git a/src/java.base/share/native/libjli/java.h b/src/java.base/share/native/libjli/java.h index f768b58a00150..ce1bd930f2f40 100644 --- a/src/java.base/share/native/libjli/java.h +++ b/src/java.base/share/native/libjli/java.h @@ -97,7 +97,8 @@ JLI_Launch(int argc, char ** argv, /* main argc, argc */ jboolean javaargs, /* JAVA_ARGS */ jboolean cpwildcard, /* classpath wildcard */ jboolean javaw, /* windows-only javaw */ - jint ergo_class /* ergnomics policy */ + jint ergo_class, /* ergnomics policy */ + char** orig_argv /* main args unprocessed */ ); /* @@ -130,7 +131,8 @@ GetApplicationHomeFromDll(char *buf, jint bufsize); void CreateExecutionEnvironment(int *argc, char ***argv, char *jrepath, jint so_jrepath, char *jvmpath, jint so_jvmpath, - char *jvmcfg, jint so_jvmcfg); + char *jvmcfg, jint so_jvmcfg, + char **orig_argv); /* Reports an error message to stderr or a window as appropriate. */ JNIEXPORT void JNICALL diff --git a/src/java.base/unix/native/libjli/java_md.c b/src/java.base/unix/native/libjli/java_md.c index 21ef4068858b1..93677035c94b1 100644 --- a/src/java.base/unix/native/libjli/java_md.c +++ b/src/java.base/unix/native/libjli/java_md.c @@ -295,7 +295,8 @@ void CreateExecutionEnvironment(int *pargc, char ***pargv, char jrepath[], jint so_jrepath, char jvmpath[], jint so_jvmpath, - char jvmcfg[], jint so_jvmcfg) { + char jvmcfg[], jint so_jvmcfg, + char **orig_argv) { char * jvmtype = NULL; char **argv = *pargv; @@ -450,9 +451,9 @@ CreateExecutionEnvironment(int *pargc, char ***pargv, (void) fflush(stderr); #ifdef SETENV_REQUIRED if (mustsetenv) { - execve(newexec, argv, newenvp); + execve(newexec, orig_argv, newenvp); } else { - execv(newexec, argv); + execv(newexec, orig_argv); } #else /* !SETENV_REQUIRED */ execv(newexec, argv); diff --git a/src/java.base/windows/native/libjli/java_md.c b/src/java.base/windows/native/libjli/java_md.c index 704b8459ac666..b825aa44a84e1 100644 --- a/src/java.base/windows/native/libjli/java_md.c +++ b/src/java.base/windows/native/libjli/java_md.c @@ -158,8 +158,10 @@ void CreateExecutionEnvironment(int *pargc, char ***pargv, char *jrepath, jint so_jrepath, char *jvmpath, jint so_jvmpath, - char *jvmcfg, jint so_jvmcfg) { + char *jvmcfg, jint so_jvmcfg, + char **orig_argv) { + (void) orig_argv; /* Not used under Windows */ char *jvmtype; int i = 0; char** argv = *pargv; diff --git a/test/jdk/tools/launcher/exeJliLaunchTest.c b/test/jdk/tools/launcher/exeJliLaunchTest.c index 5c6b597101b11..7156f005cab05 100644 --- a/test/jdk/tools/launcher/exeJliLaunchTest.c +++ b/test/jdk/tools/launcher/exeJliLaunchTest.c @@ -40,5 +40,6 @@ main(int argc, char **argv) 0, NULL, "1", "0", *argv, *argv, - 0, 0, 0, 0); + 0, 0, 0, 0, + argv); }