You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by sk...@apache.org on 2023/03/16 16:24:54 UTC
[netbeans-native-installers] 24/27: Search for Java on executable path
This is an automated email from the ASF dual-hosted git repository.
skygo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans-native-installers.git
commit 953b554960f6048d876a05a88826c91f53980f47
Author: Peter Hull <pe...@hotmail.com>
AuthorDate: Mon Mar 6 15:37:41 2023 +0000
Search for Java on executable path
---
src/main/cpp/launcher/windows/src/JavaUtils.c | 36 ++++++++++++++++++++++++-
src/main/cpp/launcher/windows/src/StringUtils.c | 15 +++++++++++
src/main/cpp/launcher/windows/src/StringUtils.h | 1 +
3 files changed, 51 insertions(+), 1 deletion(-)
diff --git a/src/main/cpp/launcher/windows/src/JavaUtils.c b/src/main/cpp/launcher/windows/src/JavaUtils.c
index e0a8c11..0f01ca4 100644
--- a/src/main/cpp/launcher/windows/src/JavaUtils.c
+++ b/src/main/cpp/launcher/windows/src/JavaUtils.c
@@ -36,6 +36,7 @@ const WCHAR * UNPACK200_EXE_SUFFIX = L"\\bin\\unpack200.exe";
const WCHAR * JAVA_LIB_SUFFIX = L"\\lib";
const WCHAR * PACK_GZ_SUFFIX = L".pack.gz";
const WCHAR * JAR_PACK_GZ_SUFFIX = L".jar.pack.gz";
+const WCHAR * PATH_ENV = L"PATH";
const DWORD JVM_EXTRACTION_TIMEOUT = 180000; //180sec
@@ -734,6 +735,34 @@ void searchJavaSystemLocations(LauncherProperties * props) {
}
}
}
+static void searchJavaOnPath(LauncherProperties * props) {
+ // Find the correct size first, then allocate
+ DWORD size = GetEnvironmentVariableW(PATH_ENV, NULL, 0);
+ WCHAR * str = newpWCHAR(size);
+ GetEnvironmentVariableW(PATH_ENV, str, size);
+ StringListEntry * list = splitStringToList(NULL, str, L';');
+ StringListEntry * iter = list;
+ while (iter) {
+ // Quickly check for java.exe ...
+ WCHAR * javaExecutable = appendStringW(NULL, iter->string);
+ javaExecutable = appendStringW(javaExecutable, L"\\java.exe");
+ if (fileExists(javaExecutable)) {
+ // ... then check properly with trySetCompatibleJava
+ WCHAR* msg = appendStringW(NULL, L"A potential path is ");
+ msg = appendStringW(msg, iter->string);
+ writeMessageW(props, OUTPUT_LEVEL_NORMAL, 0, msg, 1);
+ WCHAR * javaHome = getParentDirectory(iter->string);
+ trySetCompatibleJava(javaHome, props);
+ FREE(javaHome);
+ FREE(msg);
+ }
+ FREE(javaExecutable);
+ iter = iter->next;
+ }
+ freeStringList(&list);
+ FREE(str);
+}
+
void findSystemJava(LauncherProperties *props) {
// install bundled JVMs if any
if(isTerminated(props)) return;
@@ -756,7 +785,12 @@ void findSystemJava(LauncherProperties *props) {
writeMessageA(props, OUTPUT_LEVEL_NORMAL, 0, "Search java in environment variables", 1);
searchJavaFromEnvVariables(props);
}
-
+
+ if (isTerminated(props)) return;
+ if (props->java == NULL) {
+ writeMessageA(props, OUTPUT_LEVEL_NORMAL, 0, "Search java in executable paths", 1);
+ searchJavaOnPath(props);
+ }
// search JVM in the registry
if(isTerminated(props)) return;
if(props->java==NULL) {
diff --git a/src/main/cpp/launcher/windows/src/StringUtils.c b/src/main/cpp/launcher/windows/src/StringUtils.c
index 08f7f7c..5c501cb 100644
--- a/src/main/cpp/launcher/windows/src/StringUtils.c
+++ b/src/main/cpp/launcher/windows/src/StringUtils.c
@@ -539,6 +539,21 @@ StringListEntry * addStringToList(StringListEntry * top, WCHAR * str) {
}
+StringListEntry * splitStringToList(StringListEntry * top, WCHAR * strlist, WCHAR sep) {
+ if (strlist != NULL) {
+ WCHAR * start = strlist;
+ while (*strlist != 0) {
+ if (*strlist == 0 || *strlist == sep) {
+ top = addStringToList(top, appendStringNW(NULL, 0, start, strlist - start));
+ start = ++strlist;
+ } else {
+ ++strlist;
+ }
+ }
+ }
+ return top;
+}
+
DWORD getLineSeparatorNumber(char *str) {
DWORD result = 0;
char *ptr = str;
diff --git a/src/main/cpp/launcher/windows/src/StringUtils.h b/src/main/cpp/launcher/windows/src/StringUtils.h
index 9cf775c..ae50d7a 100644
--- a/src/main/cpp/launcher/windows/src/StringUtils.h
+++ b/src/main/cpp/launcher/windows/src/StringUtils.h
@@ -94,6 +94,7 @@ extern const char * MAIN_WINDOW_TITLE;
void freeStringList(StringListEntry **s);
StringListEntry * addStringToList(StringListEntry * top, WCHAR * str);
+ StringListEntry * splitStringToList(StringListEntry * top, WCHAR * str, WCHAR sep);
DWORD inList(StringListEntry * top, WCHAR * str);
char *toChar(const WCHAR * string);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@netbeans.apache.org
For additional commands, e-mail: commits-help@netbeans.apache.org
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists