< prev index next >
src/java.base/share/native/launcher/main.c
Print this page
rev 12309 : 8027634: Support @argfiles for java command-line tool
Reviewed-by: ksrini, mchung
@@ -29,10 +29,11 @@
* this is the only file which will be repeatedly compiled by other
* tools. The rest of the files will be linked in.
*/
#include "defines.h"
+#include "jli_util.h"
#ifdef _MSC_VER
#if _MSC_VER > 1400 && _MSC_VER < 1600
/*
@@ -104,11 +105,11 @@
for (i = 0 ; i < __argc ; i++) {
printf("wwwd_args[%d] = %s\n", i, __argv[i]);
}
}
}
- JLI_CmdToArgs(GetCommandLine());
+ JLI_CmdToArgs(GetCommandLine(), HAS_JAVA_ARGS);
margc = JLI_GetStdArgc();
// add one more to mark the end
margv = (char **)JLI_MemAlloc((margc + 1) * (sizeof(char *)));
{
int i = 0;
@@ -117,12 +118,34 @@
margv[i] = stdargs[i].arg;
}
margv[i] = NULL;
}
#else /* *NIXES */
- margc = argc;
- margv = argv;
+ // accommodate the NULL at the end
+ JLI_List args = JLI_List_new(argc + 1);
+ {
+ int i = 0;
+ for (i = 0; i < argc; i++) {
+ JLI_List argsInFile = JLI_ExpandArgFile(argv[i], HAS_JAVA_ARGS);
+ if (NULL == argsInFile) {
+ JLI_List_add(args, JLI_StringDup(argv[i]));
+ } else {
+ int cnt, idx;
+ cnt = argsInFile->size;
+ for (idx = 0; idx < cnt; idx++) {
+ JLI_List_add(args, argsInFile->elements[idx]);
+ }
+ // Shallow free, we reuse the string to avoid copy
+ JLI_MemFree(argsInFile->elements);
+ JLI_MemFree(argsInFile);
+ }
+ }
+ }
+ margc = args->size;
+ // add the NULL pointer at argv[argc]
+ JLI_List_add(args, NULL);
+ margv = args->elements;
#endif /* WIN32 */
return JLI_Launch(margc, margv,
sizeof(const_jargs) / sizeof(char *), const_jargs,
sizeof(const_appclasspath) / sizeof(char *), const_appclasspath,
FULL_VERSION,
< prev index next >