Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'features/org.eclipse.equinox.executable.feature/library/eclipse.c')
-rw-r--r--features/org.eclipse.equinox.executable.feature/library/eclipse.c54
1 files changed, 20 insertions, 34 deletions
diff --git a/features/org.eclipse.equinox.executable.feature/library/eclipse.c b/features/org.eclipse.equinox.executable.feature/library/eclipse.c
index fb01ab71c..fa7db0cfc 100644
--- a/features/org.eclipse.equinox.executable.feature/library/eclipse.c
+++ b/features/org.eclipse.equinox.executable.feature/library/eclipse.c
@@ -252,8 +252,6 @@ home directory.");
#define PERM_GEN _T_ECLIPSE("--launcher.XXMaxPermSize")
#define XXPERMGEN _T_ECLIPSE("-XX:MaxPermSize=")
-#define ADDMODULES _T_ECLIPSE("--add-modules")
-#define PERMIT_ILLEGAL_ACCESS _T_ECLIPSE("--permit-illegal-access")
#define ACTION_OPENFILE _T_ECLIPSE("openFile")
#define GTK_VERSION _T_ECLIPSE("--launcher.GTK_version")
@@ -1037,40 +1035,28 @@ static _TCHAR** mergeConfigurationFilesVMArgs() {
}
static void adjustVMArgs(_TCHAR *javaVM, _TCHAR *jniLib, _TCHAR **vmArgv[]) {
- /* JVMs whose version is >= 9 need an extra VM argument (--add-modules) to start eclipse but earlier versions
- * do not recognize this argument, remove it from the list of VM arguments when the JVM version is below 9 */
+ /* Sun/Oracle VMs below version 8 need some extra perm gen space */
+ /* Detecting Sun VM is expensive - only do so if necessary */
+ if (permGen != NULL) {
+ int specified = 0, i = -1;
+
+ /* first check to see if it is already specified */
+ while ((*vmArgv)[++i] != NULL) {
+ /* we are also counting the number of args here */
+ if (!specified && _tcsncmp((*vmArgv)[i], XXPERMGEN, _tcslen(XXPERMGEN)) == 0) {
+ specified = 1;
+ }
+ }
- int i = 0;
+ if (!specified && isMaxPermSizeVM(javaVM, jniLib)) {
+ _TCHAR ** oldArgs = *vmArgv;
+ _TCHAR *newArg = malloc((_tcslen(XXPERMGEN) + _tcslen(permGen) + 1) * sizeof(_TCHAR));
+ _stprintf(newArg, _T_ECLIPSE("%s%s"), XXPERMGEN, permGen);
- if (!isModularVM(javaVM, jniLib)) {
- while ((*vmArgv)[i] != NULL) {
- if (_tcsncmp((*vmArgv)[i], ADDMODULES, _tcslen(ADDMODULES)) == 0 || _tcsncmp((*vmArgv)[i], PERMIT_ILLEGAL_ACCESS, _tcslen(PERMIT_ILLEGAL_ACCESS)) == 0) {
- int j = 0, k = 0;
-
- if ((_tcschr((*vmArgv)[i], '=') != NULL) && ((*vmArgv)[i][13] == '=')) {
- /* --add-modules=<value> */
- j = i + 1;
- } else if (_tcslen(ADDMODULES) == _tcslen((*vmArgv)[i])) {
- /* --add-modules <value> OR --add-modules <end-of-vmArgv> */
- ((*vmArgv)[i + 1] != NULL) ? (j = i + 2) : (j = i + 1);
- } else if (_tcslen(PERMIT_ILLEGAL_ACCESS) == _tcslen((*vmArgv)[i])) {
- /* --permit-illegal-access */
- j = i + 1;
- } else {
- /* Probable new argument e.g. --add-modules-if-required or misspelled argument e.g. --add-modulesq */
- i++;
- continue;
- }
-
- /* shift all remaining arguments, but keep i, so that we can find repeated occurrences of --add-modules */
- k = i;
- (*vmArgv)[k] = (*vmArgv)[j];
- while ((*vmArgv)[j] != NULL) {
- (*vmArgv)[++k] = (*vmArgv)[++j];
- }
- } else {
- i++;
- }
+ *vmArgv = malloc((i + 2) * sizeof(_TCHAR *));
+ memcpy(*vmArgv, oldArgs, i * sizeof(_TCHAR *));
+ (*vmArgv)[i] = newArg;
+ (*vmArgv)[i + 1] = 0;
}
}
}

Back to the top