in src/main/cpp/bootstrap/platformlauncher.cpp [190:292]
bool PlatformLauncher::parseArgs(int argc, char *argv[]) {
#define CHECK_ARG \
if (i+1 == argc) {\
logErr(false, true, "Argument is missing for \"%s\" option.", argv[i]);\
return false;\
}
logMsg("Parsing arguments:");
for (int i = 0; i < argc; i++) {
logMsg("\t%s", argv[i]);
}
for (int i = 0; i < argc; i++) {
if (strcmp(ARG_NAME_SEPAR_PROC, argv[i]) == 0) {
separateProcess = true;
logMsg("Run Java in separater process");
} else if (strcmp(ARG_NAME_LAUNCHER_LOG, argv[i]) == 0) {
CHECK_ARG;
i++;
} else if (strcmp(ARG_NAME_LA_START_APP, argv[i]) == 0
|| strcmp(ARG_NAME_LA_START_AU, argv[i]) == 0) {
nextAction = argv[i];
logMsg("Next launcher action: %s", nextAction.c_str());
} else if (strcmp(ARG_NAME_LA_PPID, argv[i]) == 0) {
CHECK_ARG;
suppressConsole = false;
parentProcID = argv[++i];
logMsg("Parent process ID found: %s", parentProcID.c_str());
} else if (strcmp(ARG_NAME_USER_DIR, argv[i]) == 0) {
CHECK_ARG;
char tmp[MAX_PATH + 1] = {0};
strncpy(tmp, argv[++i], MAX_PATH);
if (strcmp(tmp, "memory") != 0 && !normalizePath(tmp, MAX_PATH)) {
logErr(false, true, "User directory path \"%s\" is not valid.", argv[i]);
return false;
}
userDir = tmp;
logMsg("User dir: %s", userDir.c_str());
} else if (strcmp(ARG_DEFAULT_USER_DIR_ROOT, argv[i]) == 0) {
CHECK_ARG;
char tmp[MAX_PATH + 1] = {0};
strncpy(tmp, argv[++i], MAX_PATH);
if (strcmp(tmp, "memory") != 0 && !normalizePath(tmp, MAX_PATH)) {
logErr(false, true, "Default User directory path \"%s\" is not valid.", argv[i]);
return false;
}
defaultUserDirRoot = tmp;
logMsg("Default Userdir root: %s", defaultUserDirRoot.c_str());
} else if (strcmp(ARG_NAME_CLUSTERS, argv[i]) == 0) {
CHECK_ARG;
clusters = argv[++i];
} else if (strcmp(ARG_NAME_BOOTCLASS, argv[i]) == 0) {
CHECK_ARG;
bootclass = argv[++i];
} else if (strcmp(ARG_NAME_JDKHOME, argv[i]) == 0) {
CHECK_ARG;
if (jdkhome.empty()) {
jdkhome = argv[++i];
if (!jvmLauncher.initialize(jdkhome.c_str())) {
logMsg("Cannot locate java installation in specified jdkhome: %s", jdkhome.c_str());
string errMsg = "Cannot locate java installation in specified jdkhome:\n";
errMsg += jdkhome;
errMsg += "\nDo you want to try to use default version?";
jdkhome = "";
if (::MessageBox(NULL, errMsg.c_str(), "Invalid jdkhome specified", MB_ICONQUESTION | MB_YESNO) == IDNO) {
return false;
}
}
} else {
i++;
}
} else if (strcmp(ARG_NAME_CP_PREPEND, argv[i]) == 0
|| strcmp(ARG_NAME_CP_PREPEND + 1, argv[i]) == 0) {
CHECK_ARG;
cpBefore += argv[++i];
} else if (strcmp(ARG_NAME_CP_APPEND, argv[i]) == 0
|| strcmp(ARG_NAME_CP_APPEND + 1, argv[i]) == 0
|| strncmp(ARG_NAME_CP_APPEND + 1, argv[i], 3) == 0
|| strncmp(ARG_NAME_CP_APPEND, argv[i], 4) == 0) {
CHECK_ARG;
cpAfter += argv[++i];
} else if (strncmp("-J", argv[i], 2) == 0) {
javaOptions.push_back(argv[i] + 2);
if (strncmp(argv[i] + 2, OPT_HEAP_DUMP_PATH, strlen(OPT_HEAP_DUMP_PATH)) == 0) {
heapDumpPathOptFound = true;
}
} else {
if (strcmp(argv[i], "-h") == 0
|| strcmp(argv[i], "-help") == 0
|| strcmp(argv[i], "--help") == 0
|| strcmp(argv[i], "/?") == 0) {
printToConsole(HELP_MSG);
if (!appendHelp.empty()) {
printToConsole(appendHelp.c_str());
}
} else if (strcmp(ARG_NAME_NOSPLASH, argv[i]) == 0) {
nosplash = true;
}
progArgs.push_back(argv[i]);
}
}
return true;
}