From 94cf1c82c49c44c5ac05b65a48929f96b27f127a Mon Sep 17 00:00:00 2001 From: srkizer Date: Fri, 23 Feb 2024 13:27:07 +0900 Subject: [PATCH] Synchronize DalamudStartInfo between cpp and cs (#1679) Dalamud Boot was using BootLogPath in place of LogPath, resulting in wrong log path. --- Dalamud.Boot/DalamudStartInfo.cpp | 7 +++++-- Dalamud.Boot/DalamudStartInfo.h | 7 +++++-- Dalamud.Boot/veh.cpp | 5 ++++- Dalamud.Common/DalamudStartInfo.cs | 1 + Dalamud.Injector/EntryPoint.cs | 1 + DalamudCrashHandler/DalamudCrashHandler.cpp | 1 - 6 files changed, 16 insertions(+), 6 deletions(-) diff --git a/Dalamud.Boot/DalamudStartInfo.cpp b/Dalamud.Boot/DalamudStartInfo.cpp index d20265bf8..f5632a2ea 100644 --- a/Dalamud.Boot/DalamudStartInfo.cpp +++ b/Dalamud.Boot/DalamudStartInfo.cpp @@ -89,13 +89,16 @@ void from_json(const nlohmann::json& json, DalamudStartInfo& config) { config.DalamudLoadMethod = json.value("LoadMethod", config.DalamudLoadMethod); config.WorkingDirectory = json.value("WorkingDirectory", config.WorkingDirectory); config.ConfigurationPath = json.value("ConfigurationPath", config.ConfigurationPath); + config.LogPath = json.value("LogPath", config.LogPath); + config.LogName = json.value("LogName", config.LogName); config.PluginDirectory = json.value("PluginDirectory", config.PluginDirectory); - config.DefaultPluginDirectory = json.value("DefaultPluginDirectory", config.DefaultPluginDirectory); config.AssetDirectory = json.value("AssetDirectory", config.AssetDirectory); config.Language = json.value("Language", config.Language); config.GameVersion = json.value("GameVersion", config.GameVersion); - config.DelayInitializeMs = json.value("DelayInitializeMs", config.DelayInitializeMs); config.TroubleshootingPackData = json.value("TroubleshootingPackData", std::string{}); + config.DelayInitializeMs = json.value("DelayInitializeMs", config.DelayInitializeMs); + config.NoLoadPlugins = json.value("NoLoadPlugins", config.NoLoadPlugins); + config.NoLoadThirdPartyPlugins = json.value("NoLoadThirdPartyPlugins", config.NoLoadThirdPartyPlugins); config.BootLogPath = json.value("BootLogPath", config.BootLogPath); config.BootShowConsole = json.value("BootShowConsole", config.BootShowConsole); diff --git a/Dalamud.Boot/DalamudStartInfo.h b/Dalamud.Boot/DalamudStartInfo.h index 5cee8f16b..e6cc54ab0 100644 --- a/Dalamud.Boot/DalamudStartInfo.h +++ b/Dalamud.Boot/DalamudStartInfo.h @@ -35,13 +35,16 @@ struct DalamudStartInfo { LoadMethod DalamudLoadMethod = LoadMethod::Entrypoint; std::string WorkingDirectory; std::string ConfigurationPath; + std::string LogPath; + std::string LogName; std::string PluginDirectory; - std::string DefaultPluginDirectory; std::string AssetDirectory; ClientLanguage Language = ClientLanguage::English; std::string GameVersion; - int DelayInitializeMs = 0; std::string TroubleshootingPackData; + int DelayInitializeMs = 0; + bool NoLoadPlugins; + bool NoLoadThirdPartyPlugins; std::string BootLogPath; bool BootShowConsole = false; diff --git a/Dalamud.Boot/veh.cpp b/Dalamud.Boot/veh.cpp index 059189202..58234783a 100644 --- a/Dalamud.Boot/veh.cpp +++ b/Dalamud.Boot/veh.cpp @@ -112,13 +112,16 @@ static void append_injector_launch_args(std::vector& args) case DalamudStartInfo::LoadMethod::DllInject: args.emplace_back(L"--mode=inject"); } - args.emplace_back(L"--logpath=\"" + unicode::convert(g_startInfo.BootLogPath) + L"\""); args.emplace_back(L"--dalamud-working-directory=\"" + unicode::convert(g_startInfo.WorkingDirectory) + L"\""); args.emplace_back(L"--dalamud-configuration-path=\"" + unicode::convert(g_startInfo.ConfigurationPath) + L"\""); + args.emplace_back(L"--logpath=\"" + unicode::convert(g_startInfo.LogPath) + L"\""); + args.emplace_back(L"--logname=\"" + unicode::convert(g_startInfo.LogName) + L"\""); args.emplace_back(L"--dalamud-plugin-directory=\"" + unicode::convert(g_startInfo.PluginDirectory) + L"\""); args.emplace_back(L"--dalamud-asset-directory=\"" + unicode::convert(g_startInfo.AssetDirectory) + L"\""); args.emplace_back(std::format(L"--dalamud-client-language={}", static_cast(g_startInfo.Language))); args.emplace_back(std::format(L"--dalamud-delay-initialize={}", g_startInfo.DelayInitializeMs)); + // NoLoadPlugins/NoLoadThirdPartyPlugins: supplied from DalamudCrashHandler + if (g_startInfo.BootShowConsole) args.emplace_back(L"--console"); if (g_startInfo.BootEnableEtw) diff --git a/Dalamud.Common/DalamudStartInfo.cs b/Dalamud.Common/DalamudStartInfo.cs index edf21d174..a84d3b68f 100644 --- a/Dalamud.Common/DalamudStartInfo.cs +++ b/Dalamud.Common/DalamudStartInfo.cs @@ -5,6 +5,7 @@ namespace Dalamud.Common; /// /// Struct containing information needed to initialize Dalamud. +/// Modify DalamudStartInfo.h and DalamudStartInfo.cpp along with this record. /// [Serializable] public record DalamudStartInfo diff --git a/Dalamud.Injector/EntryPoint.cs b/Dalamud.Injector/EntryPoint.cs index c784ec1d1..2d776b043 100644 --- a/Dalamud.Injector/EntryPoint.cs +++ b/Dalamud.Injector/EntryPoint.cs @@ -389,6 +389,7 @@ namespace Dalamud.Injector #else startInfo.LogPath ??= xivlauncherDir; #endif + startInfo.LogName ??= string.Empty; // Set boot defaults startInfo.BootShowConsole = args.Contains("--console"); diff --git a/DalamudCrashHandler/DalamudCrashHandler.cpp b/DalamudCrashHandler/DalamudCrashHandler.cpp index 3a69198b8..d4e9f0a1c 100644 --- a/DalamudCrashHandler/DalamudCrashHandler.cpp +++ b/DalamudCrashHandler/DalamudCrashHandler.cpp @@ -896,7 +896,6 @@ int main() { SYSTEMTIME st; GetLocalTime(&st); const auto dalamudLogPath = logDir.empty() ? std::filesystem::path() : logDir / L"Dalamud.log"; - const auto dalamudBootLogPath = logDir.empty() ? std::filesystem::path() : logDir / L"Dalamud.boot.log"; const auto dumpPath = logDir.empty() ? std::filesystem::path() : logDir / std::format(L"dalamud_appcrash_{:04}{:02}{:02}_{:02}{:02}{:02}_{:03}_{}.dmp", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds, dwProcessId); const auto logPath = logDir.empty() ? std::filesystem::path() : logDir / std::format(L"dalamud_appcrash_{:04}{:02}{:02}_{:02}{:02}{:02}_{:03}_{}.log", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds, dwProcessId); std::wstring dumpError;