From 178085750d6b5a2a7077b469039b2b14c79fe430 Mon Sep 17 00:00:00 2001 From: Maschell Date: Mon, 3 Oct 2022 16:27:28 +0200 Subject: [PATCH] Use switch-case for hook calling --- source/hooks.cpp | 77 ++++++++++++++++++++++++++---------------------- 1 file changed, 41 insertions(+), 36 deletions(-) diff --git a/source/hooks.cpp b/source/hooks.cpp index a74abbf..0666b7e 100644 --- a/source/hooks.cpp +++ b/source/hooks.cpp @@ -46,42 +46,47 @@ void CallHook(const std::unique_ptr &plugin, wups_loader_hook_t DEBUG_FUNCTION_LINE_VERBOSE("Calling hook of type %s for plugin %s [%d]", hook_names[hook->getType()], plugin->metaInformation->getName().c_str(), hook_type); void *func_ptr = hook->getFunctionPointer(); if (func_ptr != nullptr) { - if (hook_type == WUPS_LOADER_HOOK_INIT_PLUGIN || - hook_type == WUPS_LOADER_HOOK_DEINIT_PLUGIN || - hook_type == WUPS_LOADER_HOOK_APPLICATION_STARTS || - hook_type == WUPS_LOADER_HOOK_APPLICATION_ENDS || - hook_type == WUPS_LOADER_HOOK_APPLICATION_REQUESTS_EXIT || - hook_type == WUPS_LOADER_HOOK_INIT_WUT_MALLOC || - hook_type == WUPS_LOADER_HOOK_FINI_WUT_MALLOC || - hook_type == WUPS_LOADER_HOOK_INIT_WUT_NEWLIB || - hook_type == WUPS_LOADER_HOOK_FINI_WUT_NEWLIB || - hook_type == WUPS_LOADER_HOOK_INIT_WUT_STDCPP || - hook_type == WUPS_LOADER_HOOK_FINI_WUT_STDCPP || - hook_type == WUPS_LOADER_HOOK_INIT_WUT_DEVOPTAB || - hook_type == WUPS_LOADER_HOOK_FINI_WUT_DEVOPTAB || - hook_type == WUPS_LOADER_HOOK_INIT_WUT_SOCKETS || - hook_type == WUPS_LOADER_HOOK_FINI_WUT_SOCKETS || - hook_type == WUPS_LOADER_HOOK_INIT_WRAPPER || - hook_type == WUPS_LOADER_HOOK_FINI_WRAPPER || - hook_type == WUPS_LOADER_HOOK_GET_CONFIG || - hook_type == WUPS_LOADER_HOOK_CONFIG_CLOSED || - hook_type == WUPS_LOADER_HOOK_RELEASE_FOREGROUND || - hook_type == WUPS_LOADER_HOOK_ACQUIRED_FOREGROUND) { - // clang-format off - ((void(*)())((uint32_t *) func_ptr))(); - // clang-format on - } else if (hook_type == WUPS_LOADER_HOOK_INIT_STORAGE) { - wups_loader_init_storage_args_t args; - args.open_storage_ptr = &StorageUtils::OpenStorage; - args.close_storage_ptr = &StorageUtils::CloseStorage; - args.plugin_id = plugin->getMetaInformation()->getStorageId().c_str(); - // clang-format off - ((void(*)(wups_loader_init_storage_args_t))((uint32_t *) func_ptr))(args); - // clang-format on - } else { - DEBUG_FUNCTION_LINE_ERR("######################################"); - DEBUG_FUNCTION_LINE_ERR("Hook is not implemented %s [%d]", hook_names[hook_type], hook_type); - DEBUG_FUNCTION_LINE_ERR("######################################"); + switch (hook_type) { + case WUPS_LOADER_HOOK_INIT_WUT_MALLOC: + case WUPS_LOADER_HOOK_FINI_WUT_MALLOC: + case WUPS_LOADER_HOOK_INIT_WUT_NEWLIB: + case WUPS_LOADER_HOOK_FINI_WUT_NEWLIB: + case WUPS_LOADER_HOOK_INIT_WUT_STDCPP: + case WUPS_LOADER_HOOK_FINI_WUT_STDCPP: + case WUPS_LOADER_HOOK_INIT_WUT_DEVOPTAB: + case WUPS_LOADER_HOOK_FINI_WUT_DEVOPTAB: + case WUPS_LOADER_HOOK_INIT_WUT_SOCKETS: + case WUPS_LOADER_HOOK_FINI_WUT_SOCKETS: + case WUPS_LOADER_HOOK_INIT_WRAPPER: + case WUPS_LOADER_HOOK_FINI_WRAPPER: + case WUPS_LOADER_HOOK_GET_CONFIG: + case WUPS_LOADER_HOOK_CONFIG_CLOSED: + case WUPS_LOADER_HOOK_INIT_PLUGIN: + case WUPS_LOADER_HOOK_DEINIT_PLUGIN: + case WUPS_LOADER_HOOK_APPLICATION_STARTS: + case WUPS_LOADER_HOOK_RELEASE_FOREGROUND: + case WUPS_LOADER_HOOK_ACQUIRED_FOREGROUND: + case WUPS_LOADER_HOOK_APPLICATION_REQUESTS_EXIT: + case WUPS_LOADER_HOOK_APPLICATION_ENDS: + // clang-format off + ((void(*)())((uint32_t *) func_ptr))(); + // clang-format on + break; + case WUPS_LOADER_HOOK_INIT_STORAGE: { + wups_loader_init_storage_args_t args; + args.open_storage_ptr = &StorageUtils::OpenStorage; + args.close_storage_ptr = &StorageUtils::CloseStorage; + args.plugin_id = plugin->getMetaInformation()->getStorageId().c_str(); + // clang-format off + ((void(*)(wups_loader_init_storage_args_t))((uint32_t *) func_ptr))(args); + // clang-format on + break; + } + default: { + DEBUG_FUNCTION_LINE_ERR("######################################"); + DEBUG_FUNCTION_LINE_ERR("Hook is not implemented %s [%d]", hook_names[hook_type], hook_type); + DEBUG_FUNCTION_LINE_ERR("######################################"); + } } } else { DEBUG_FUNCTION_LINE_ERR("Failed to call hook. It was not defined");