From a5bf8c18d2b69c4c38758168f18658140367f7fb Mon Sep 17 00:00:00 2001 From: goat <16760685+goaaats@users.noreply.github.com> Date: Fri, 13 Aug 2021 01:50:48 +0200 Subject: [PATCH] feat: add DALAMUD_RUNTIME env var for custom runtime locations --- lib/CoreCLR/boot.cpp | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/lib/CoreCLR/boot.cpp b/lib/CoreCLR/boot.cpp index 0ba4dc19f..0782af946 100644 --- a/lib/CoreCLR/boot.cpp +++ b/lib/CoreCLR/boot.cpp @@ -1,4 +1,5 @@ #define WIN32_LEAN_AND_MEAN +#define _CRT_SECURE_NO_WARNINGS #include #include @@ -35,15 +36,30 @@ int InitializeClrAndGetEntryPoint( CoreCLR clr; SetEnvironmentVariable(L"DOTNET_MULTILEVEL_LOOKUP", L"0"); + char* env_path = std::getenv("DALAMUD_RUNTIME"); + wchar_t* dotnet_path; + wchar_t* _appdata; - result = SHGetKnownFolderPath(FOLDERID_RoamingAppData, KF_FLAG_DEFAULT, NULL, &_appdata); - if (result != 0) + + if (!env_path) { - printf("Error: Unable to get RoamingAppData path (err=%d)\n", result); - return result; + result = SHGetKnownFolderPath(FOLDERID_RoamingAppData, KF_FLAG_DEFAULT, nullptr, &_appdata); + + if (result != 0) + { + printf("Error: Unable to get RoamingAppData path (err=%d)\n", result); + return result; + } + + std::filesystem::path fs_app_data(_appdata); + dotnet_path = _wcsdup(fs_app_data.append("XIVLauncher").append("runtime").c_str()); + } + else + { + const size_t cSize = strlen(env_path)+1; + dotnet_path = new wchar_t[cSize]; + mbstowcs (dotnet_path, env_path, cSize); } - std::filesystem::path fs_app_data(_appdata); - wchar_t* dotnet_path = _wcsdup(fs_app_data.append("XIVLauncher").append("runtime").c_str()); // =========================================================================== //