提交 fa3ea526 编写于 作者: R robm

8077822: javac does not recognize '*.java' as file if '-J' option is specified

Reviewed-by: ksrini
上级 023fdb9f
......@@ -1403,6 +1403,26 @@ ProcessPlatformOption(const char *arg)
return JNI_FALSE;
}
int
filterArgs(StdArg *stdargs, const int nargc, StdArg **pargv) {
StdArg* argv = NULL;
int nargs = 0;
int i;
/* Copy the non-vm args */
for (i = 0; i < nargc ; i++) {
const char *arg = stdargs[i].arg;
if (arg[0] == '-' && arg[1] == 'J')
continue;
argv = (StdArg*) JLI_MemRealloc(argv, (nargs+1) * sizeof(StdArg));
argv[nargs].arg = JLI_StringDup(arg);
argv[nargs].has_wildcard = stdargs[i].has_wildcard;
nargs++;
}
*pargv = argv;
return nargs;
}
/*
* At this point we have the arguments to the application, and we need to
* check with original stdargs in order to compare which of these truly
......@@ -1417,8 +1437,9 @@ CreateApplicationArgs(JNIEnv *env, char **strv, int argc)
char *ostart, *astart, **nargv;
jboolean needs_expansion = JNI_FALSE;
jmethodID mid;
int stdargc;
int filteredargc, stdargc;
StdArg *stdargs;
StdArg *filteredargs;
jclass cls = GetLauncherHelperClass(env);
NULL_CHECK0(cls);
......@@ -1429,6 +1450,8 @@ CreateApplicationArgs(JNIEnv *env, char **strv, int argc)
stdargs = JLI_GetStdArgs();
stdargc = JLI_GetStdArgc();
filteredargc = filterArgs(stdargs, stdargc, &filteredargs);
// sanity check, this should never happen
if (argc > stdargc) {
JLI_TraceLauncher("Warning: app args is larger than the original, %d %d\n", argc, stdargc);
......@@ -1437,8 +1460,8 @@ CreateApplicationArgs(JNIEnv *env, char **strv, int argc)
}
// sanity check, match the args we have, to the holy grail
idx = stdargc - argc;
ostart = stdargs[idx].arg;
idx = filteredargc - argc;
ostart = filteredargs[idx].arg;
astart = strv[0];
// sanity check, ensure that the first argument of the arrays are the same
if (JLI_StrCmp(ostart, astart) != 0) {
......@@ -1451,8 +1474,8 @@ CreateApplicationArgs(JNIEnv *env, char **strv, int argc)
// make a copy of the args which will be expanded in java if required.
nargv = (char **)JLI_MemAlloc(argc * sizeof(char*));
for (i = 0, j = idx; i < argc; i++, j++) {
jboolean arg_expand = (JLI_StrCmp(stdargs[j].arg, strv[i]) == 0)
? stdargs[j].has_wildcard
jboolean arg_expand = (JLI_StrCmp(filteredargs[j].arg, strv[i]) == 0)
? filteredargs[j].has_wildcard
: JNI_FALSE;
if (needs_expansion == JNI_FALSE)
needs_expansion = arg_expand;
......@@ -1489,5 +1512,6 @@ CreateApplicationArgs(JNIEnv *env, char **strv, int argc)
JLI_MemFree(nargv[i]);
}
JLI_MemFree(nargv);
JLI_MemFree(filteredargs);
return outArray;
}
......@@ -24,7 +24,7 @@
/**
* @test
* @bug 5030233 6214916 6356475 6571029 6684582 6742159 4459600 6758881 6753938
* 6894719 6968053 7151434 7146424 8007333
* 6894719 6968053 7151434 7146424 8007333 8077822
* @summary Argument parsing validation.
* @compile -XDignore.symbol.file Arrrghs.java
* @run main/othervm Arrrghs
......@@ -431,6 +431,16 @@ public class Arrrghs extends TestHelper {
throw new RuntimeException("Error: compiling java wildcards");
}
// test if javac (the command) can compile *.java with a vmoption
tr = doExec(javacCmd, "-cp", ".",
"-J-showversion", "-J-Dsomeproperty=foo",
libDir.getName() + File.separator + "*.java");
if (!tr.isOK()) {
System.out.println(tr);
throw new RuntimeException("Error: compiling java wildcards with vmoptions");
}
// use the jar cmd to create jars using the ? wildcard
File jarFoo = new File(libDir, "Foo.jar");
tr = doExec(jarCmd, "cvf", jarFoo.getAbsolutePath(), "lib" + File.separator + "F?o.class");
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册