/* * Determine the default official application name * * This function provides the default application name that appears in a variety of * places such as: title of message dialog, title of splash screen window * that shows up in Windows task bar. * It is computed from the name of the launcher executable and * by capitalizing the first letter. e.g. "c:/ide/eclipse.exe" provides * a default name of "Eclipse". */ static _TCHAR* getDefaultOfficialName(_TCHAR* program) { _TCHAR *ch = NULL; /* Skip the directory part */ ch = lastDirSeparator( program ); if (ch == NULL) ch = program; else ch++; ch = _tcsdup( ch ); #ifdef _WIN32 { /* Search for the extension .exe and cut it */ _TCHAR *extension = _tcsrchr(ch, _T_ECLIPSE('.')); if (extension != NULL) { *extension = _T_ECLIPSE('\0'); } } #endif /* Upper case the first character */ #ifndef LINUX { *ch = _totupper(*ch); } #else { if (*ch >= 'a' && *ch <= 'z') { *ch -= 32; } } #endif return ch; }
/* Determine the Program Directory * * This function takes the directory where program executable resides and * determines the installation directory. */ _TCHAR* getProgramDir(_TCHAR* program) { _TCHAR* ch; if(programDir != NULL) return programDir; programDir = malloc( (_tcslen( program ) + 1) * sizeof(_TCHAR) ); _tcscpy( programDir, program ); ch = lastDirSeparator( programDir ); if (ch != NULL) { *(ch+1) = _T_ECLIPSE('\0'); return programDir; } /* Can't figure out from the program */ free(programDir); programDir = NULL; return NULL; }
/* * Find the VM shared library starting from the java executable */ static _TCHAR* findLib( _TCHAR* command ) { int i, j; size_t pathLength; struct _stat stats; _TCHAR * path; /* path to resulting jvm shared library */ _TCHAR * location; /* points to begining of jvmLocations section of path */ /* for looking in the registry */ HKEY jreKey = NULL; DWORD length = MAX_PATH; _TCHAR keyName[MAX_PATH]; _TCHAR * jreKeyName; if (command != NULL) { location = lastDirSeparator( command ) + 1; /*check first to see if command already points to the library */ if (isVMLibrary(command)) { if (_tstat( command, &stats ) == 0 && (stats.st_mode & S_IFREG) != 0) return command; /* exists */ return NULL; /* doesn't exist */ } pathLength = (size_t) (location - command); path = malloc((pathLength + MAX_LOCATION_LENGTH + 1 + _tcslen(vmLibrary) + 1) * sizeof(_TCHAR)); _tcsncpy(path, command, pathLength); location = &path[pathLength]; /* * We are trying base/jvmLocations[*]/vmLibrary * where base is the directory containing the given java command, normally jre/bin */ i = -1; while(jvmLocations[++i] != NULL) { _stprintf(location, _T_ECLIPSE("%s%c%s"), jvmLocations[i], dirSeparator, vmLibrary); if (_tstat( path, &stats ) == 0 && (stats.st_mode & S_IFREG) != 0) { /* found it */ return path; } } /* if command is eclipse/jre, don't look in registry */ location = malloc( (_tcslen( getProgramDir() ) + _tcslen( shippedVMDir ) + 1) * sizeof(_TCHAR) ); _stprintf( location, _T_ECLIPSE("%s%s"), getProgramDir(), shippedVMDir ); if( _tcsncmp(command, location, _tcslen(location)) == 0) { free(location); return NULL; } free(location); } /* Not found yet, try the registry, we will use the first vm >= 1.4 */ jreKeyName = _T("Software\\JavaSoft\\Java Runtime Environment"); if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, jreKeyName, 0, KEY_READ, &jreKey) == ERROR_SUCCESS) { if(RegQueryValueEx(jreKey, _T_ECLIPSE("CurrentVersion"), NULL, NULL, (void*)&keyName, &length) == ERROR_SUCCESS) { path = checkVMRegistryKey(jreKey, keyName); if (path != NULL) { RegCloseKey(jreKey); return path; } } j = 0; length = MAX_PATH; while (RegEnumKeyEx(jreKey, j++, keyName, &length, 0, 0, 0, 0) == ERROR_SUCCESS) { /*look for a 1.4 or 1.5 vm*/ if( _tcsncmp(_T("1.4"), keyName, 3) <= 0 ) { path = checkVMRegistryKey(jreKey, keyName); if (path != NULL) { RegCloseKey(jreKey); return path; } } } RegCloseKey(jreKey); } return NULL; }