From b3cd19affa4e4bf880dd7cd3074c3908f06bacbe Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 15 Dec 2023 19:47:02 +0000 Subject: [PATCH] window_launcher: fix proxying of JAVA_HOME --- src/browser/window_launcher_posix.cxx | 28 ++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/src/browser/window_launcher_posix.cxx b/src/browser/window_launcher_posix.cxx index 9fcfe5d..b57bf99 100644 --- a/src/browser/window_launcher_posix.cxx +++ b/src/browser/window_launcher_posix.cxx @@ -568,16 +568,30 @@ CefRefPtr Browser::Launcher::LaunchHdosJar(CefRefPtr< const char* env_key_java_path = "BOLT_JAVA_PATH="; std::string java_path_str = std::string(java_home) + "/bin/java"; - std::filesystem::path java_proxy_path = std::filesystem::current_path(); - java_proxy_path.append("java-proxy"); - std::filesystem::path java_proxy_lib_path = java_proxy_path; + std::filesystem::path java_proxy_bin_path = std::filesystem::current_path(); + java_proxy_bin_path.append("java-proxy"); + std::filesystem::path java_proxy_data_dir_path = this->data_dir; + java_proxy_data_dir_path.append("java-proxy"); + std::filesystem::remove_all(java_proxy_data_dir_path); + std::filesystem::create_directory(java_proxy_data_dir_path); + std::filesystem::path java_proxy_lib_path = java_proxy_data_dir_path; java_proxy_lib_path.append("lib"); - std::filesystem::path java_proxy_conf_path = java_proxy_path; + std::filesystem::path java_proxy_conf_path = java_proxy_data_dir_path; java_proxy_conf_path.append("conf"); + std::filesystem::path java_proxy_java_path = java_proxy_data_dir_path; + java_proxy_java_path.append("bin"); + std::filesystem::create_directory(java_proxy_java_path); + java_proxy_java_path.append("java"); const std::string java_lib_str = std::string(java_home) + "/lib"; const std::string java_conf_str = std::string(java_home) + "/conf"; - symlink(java_lib_str.c_str(), java_proxy_lib_path.c_str()); - symlink(java_conf_str.c_str(), java_proxy_conf_path.c_str()); + int err = 0; + err += !!symlink(java_lib_str.c_str(), java_proxy_lib_path.c_str()); + err += !!symlink(java_conf_str.c_str(), java_proxy_conf_path.c_str()); + err += !!symlink(java_proxy_bin_path.c_str(), java_proxy_java_path.c_str()); + if (err) { + const char* data = "Unable to create symlinks\n"; + return new ResourceHandler(reinterpret_cast(data), strlen(data), 500, "text/plain"); + } // array of structures for keeping track of which environment variables we want to set and have already set EnvQueryParam version_param = {.should_set = false, .key = "version"}; @@ -671,7 +685,7 @@ CefRefPtr Browser::Launcher::LaunchHdosJar(CefRefPtr< char* argv[6]; char arg_jar[] = "-jar"; - std::string arg_java_home = "-Djava.home=" + java_proxy_path.string(); + std::string arg_java_home = "-Djava.home=" + java_proxy_data_dir_path.string(); argv[0] = java_path_str.data(); argv[1] = arg_user_home.data(); argv[2] = arg_java_home.data();