From 9e0932cb380b628096bbf089745ac1f4b7d17441 Mon Sep 17 00:00:00 2001 From: Maschell Date: Sun, 4 Aug 2024 15:41:10 +0200 Subject: [PATCH] Only check for config menu if the plugin is linked and loaded --- source/utils/config/ConfigUtils.cpp | 57 +++++++++++++++-------------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/source/utils/config/ConfigUtils.cpp b/source/utils/config/ConfigUtils.cpp index 1054d3e..b720a72 100644 --- a/source/utils/config/ConfigUtils.cpp +++ b/source/utils/config/ConfigUtils.cpp @@ -84,38 +84,41 @@ void ConfigUtils::displayMenu() { info.pluginData = plugin.getPluginDataCopy(); std::unique_ptr config; - if (const auto configData = plugin.getConfigData()) { - if (const auto configHandleOpt = configData->createConfig()) { - WUPSConfigAPIStatus callbackResult = configData->CallMenuOpenedCallback(configHandleOpt.value()); - config = WUPSConfigAPIBackend::Intern::PopConfigByHandle(configHandleOpt.value()); - if (!config) { - DEBUG_FUNCTION_LINE_ERR("Failed to get config for handle: %08X", configHandleOpt.value().handle); - } else if (callbackResult != WUPSCONFIG_API_RESULT_SUCCESS) { - DEBUG_FUNCTION_LINE_ERR("Callback failed for %s: %s", info.name.c_str(), WUPSConfigAPI_GetStatusStr(callbackResult)); - config.reset(); + + if (plugin.isLinkedAndLoaded()) { + if (const auto configData = plugin.getConfigData()) { + if (const auto configHandleOpt = configData->createConfig()) { + WUPSConfigAPIStatus callbackResult = configData->CallMenuOpenedCallback(configHandleOpt.value()); + config = WUPSConfigAPIBackend::Intern::PopConfigByHandle(configHandleOpt.value()); + if (!config) { + DEBUG_FUNCTION_LINE_ERR("Failed to get config for handle: %08X", configHandleOpt.value().handle); + } else if (callbackResult != WUPSCONFIG_API_RESULT_SUCCESS) { + DEBUG_FUNCTION_LINE_ERR("Callback failed for %s: %s", info.name.c_str(), WUPSConfigAPI_GetStatusStr(callbackResult)); + config.reset(); + } else { + info.name = config->getName(); + } } else { - info.name = config->getName(); + DEBUG_FUNCTION_LINE_ERR("Failed to create config for plugin: \"%s\"", info.name.c_str()); } } else { - DEBUG_FUNCTION_LINE_ERR("Failed to create config for plugin: \"%s\"", info.name.c_str()); - } - } else { - for (const auto &hook : plugin.getPluginLinkInformation().getHookDataList()) { - if (hook.getType() == WUPS_LOADER_HOOK_GET_CONFIG_DEPRECATED) { - if (hook.getFunctionPointer() == nullptr) { - DEBUG_FUNCTION_LINE_ERR("Hook had invalid ptr"); + for (const auto &hook : plugin.getPluginLinkInformation().getHookDataList()) { + if (hook.getType() == WUPS_LOADER_HOOK_GET_CONFIG_DEPRECATED) { + if (hook.getFunctionPointer() == nullptr) { + DEBUG_FUNCTION_LINE_ERR("Hook had invalid ptr"); + break; + } + auto cur_config_handle = ((void *(*) ())((uint32_t *) hook.getFunctionPointer()))(); + if (cur_config_handle == nullptr) { + DEBUG_FUNCTION_LINE_WARN("Hook returned empty handle"); + break; + } + config = WUPSConfigAPIBackend::Intern::PopConfigByHandle(WUPSConfigHandle(cur_config_handle)); + if (!config) { + DEBUG_FUNCTION_LINE_ERR("Failed to find config for handle: %08X", cur_config_handle); + } break; } - auto cur_config_handle = reinterpret_cast(static_cast(hook.getFunctionPointer()))(); - if (cur_config_handle == nullptr) { - DEBUG_FUNCTION_LINE_WARN("Hook returned empty handle"); - break; - } - config = WUPSConfigAPIBackend::Intern::PopConfigByHandle(WUPSConfigHandle(cur_config_handle)); - if (!config) { - DEBUG_FUNCTION_LINE_ERR("Failed to find config for handle: %08X", cur_config_handle); - } - break; } } }