diff --git a/plugins/libimhex/CMakeLists.txt b/plugins/libimhex/CMakeLists.txt index 37c64c0f6..6d9a3d772 100644 --- a/plugins/libimhex/CMakeLists.txt +++ b/plugins/libimhex/CMakeLists.txt @@ -46,6 +46,7 @@ set(LIBIMHEX_SOURCES source/data_processor/node.cpp source/helpers/utils.cpp + source/helpers/paths.cpp source/helpers/shared_data.cpp source/helpers/crypto.cpp source/helpers/lang.cpp @@ -74,7 +75,7 @@ if (APPLE) endif () endif () - set(LIBIMHEX_SOURCES ${LIBIMHEX_SOURCES} source/helpers/utils_mac.mm) + set(LIBIMHEX_SOURCES ${LIBIMHEX_SOURCES} source/helpers/paths_mac.mm) endif () add_library(libimhex SHARED ${LIBIMHEX_SOURCES}) diff --git a/plugins/libimhex/include/hex/helpers/paths.hpp b/plugins/libimhex/include/hex/helpers/paths.hpp new file mode 100644 index 000000000..b9e0f7698 --- /dev/null +++ b/plugins/libimhex/include/hex/helpers/paths.hpp @@ -0,0 +1,22 @@ +#pragma once + +#include +#include + +namespace hex { + + enum class ImHexPath { + Patterns, + PatternsInclude, + Magic, + Python, + Plugins, + Yara, + Config, + Resources, + Constants + }; + + std::vector getPath(ImHexPath path); + +} \ No newline at end of file diff --git a/plugins/libimhex/include/hex/helpers/utils_mac.h b/plugins/libimhex/include/hex/helpers/paths_mac.h similarity index 76% rename from plugins/libimhex/include/hex/helpers/utils_mac.h rename to plugins/libimhex/include/hex/helpers/paths_mac.h index 29b22b6c2..807a6b273 100644 --- a/plugins/libimhex/include/hex/helpers/utils_mac.h +++ b/plugins/libimhex/include/hex/helpers/paths_mac.h @@ -1,7 +1,7 @@ #pragma once #if defined(OS_MACOS) - #include + #include namespace hex { std::string getPathForMac(ImHexPath path); diff --git a/plugins/libimhex/include/hex/helpers/utils.hpp b/plugins/libimhex/include/hex/helpers/utils.hpp index 835fecab6..1d164eb93 100644 --- a/plugins/libimhex/include/hex/helpers/utils.hpp +++ b/plugins/libimhex/include/hex/helpers/utils.hpp @@ -157,20 +157,6 @@ namespace hex { trimRight(s); } - enum class ImHexPath { - Patterns, - PatternsInclude, - Magic, - Python, - Plugins, - Yara, - Config, - Resources, - Constants - }; - - std::vector getPath(ImHexPath path); - enum class DialogMode { Open, Save, diff --git a/plugins/libimhex/source/api/content_registry.cpp b/plugins/libimhex/source/api/content_registry.cpp index 504bf8813..191ac46ec 100644 --- a/plugins/libimhex/source/api/content_registry.cpp +++ b/plugins/libimhex/source/api/content_registry.cpp @@ -1,7 +1,7 @@ #include #include -#include +#include #include #include diff --git a/plugins/libimhex/source/helpers/paths.cpp b/plugins/libimhex/source/helpers/paths.cpp new file mode 100644 index 000000000..36fe571f0 --- /dev/null +++ b/plugins/libimhex/source/helpers/paths.cpp @@ -0,0 +1,108 @@ +#include +#include + +#if defined(OS_WINDOWS) + #include + #include +#elif defined(OS_LINUX) + #include +#endif + +#include +#include +#include +#include + +namespace hex { + + std::vector getPath(ImHexPath path) { + #if defined(OS_WINDOWS) + std::string exePath(MAX_PATH, '\0'); + GetModuleFileName(nullptr, exePath.data(), exePath.length()); + auto parentDir = std::filesystem::path(exePath).parent_path(); + + std::filesystem::path appDataDir; + { + LPWSTR wAppDataPath = nullptr; + if (!SUCCEEDED(SHGetKnownFolderPath(FOLDERID_LocalAppData, KF_FLAG_CREATE, nullptr, &wAppDataPath))) + throw std::runtime_error("Failed to get APPDATA folder path"); + + appDataDir = wAppDataPath; + CoTaskMemFree(wAppDataPath); + } + + switch (path) { + case ImHexPath::Patterns: + return { (parentDir / "patterns").string() }; + case ImHexPath::PatternsInclude: + return { (parentDir / "includes").string() }; + case ImHexPath::Magic: + return { (parentDir / "magic").string() }; + case ImHexPath::Python: + return { parentDir.string() }; + case ImHexPath::Plugins: + return { (parentDir / "plugins").string() }; + case ImHexPath::Yara: + return { (parentDir / "yara").string() }; + case ImHexPath::Config: + return { (appDataDir / "imhex" / "config").string() }; + case ImHexPath::Resources: + return { (parentDir / "resources").string() }; + case ImHexPath::Constants: + return { (parentDir / "constants").string() }; + default: __builtin_unreachable(); + } + #elif defined(OS_MACOS) + return { getPathForMac(path) }; + #else + std::vector configDirs = xdg::ConfigDirs(); + std::vector dataDirs = xdg::DataDirs(); + + configDirs.insert(configDirs.begin(), xdg::ConfigHomeDir()); + dataDirs.insert(dataDirs.begin(), xdg::DataHomeDir()); + + std::vector result; + + switch (path) { + case ImHexPath::Patterns: + std::transform(dataDirs.begin(), dataDirs.end(), std::back_inserter(result), + [](auto p) { return (p / "imhex" / "patterns").string(); }); + return result; + case ImHexPath::PatternsInclude: + std::transform(dataDirs.begin(), dataDirs.end(), std::back_inserter(result), + [](auto p) { return (p / "imhex" / "includes").string(); }); + return result; + case ImHexPath::Magic: + std::transform(dataDirs.begin(), dataDirs.end(), std::back_inserter(result), + [](auto p) { return (p / "imhex" / "magic").string(); }); + return result; + case ImHexPath::Python: + std::transform(dataDirs.begin(), dataDirs.end(), std::back_inserter(result), + [](auto p) { return (p / "imhex").string(); }); + return result; + case ImHexPath::Plugins: + std::transform(dataDirs.begin(), dataDirs.end(), std::back_inserter(result), + [](auto p) { return (p / "imhex" / "plugins").string(); }); + return result; + case ImHexPath::Yara: + std::transform(dataDirs.begin(), dataDirs.end(), std::back_inserter(result), + [](auto p) { return (p / "imhex" / "yara").string(); }); + return result; + case ImHexPath::Config: + std::transform(configDirs.begin(), configDirs.end(), std::back_inserter(result), + [](auto p) { return (p / "imhex").string(); }); + return result; + case ImHexPath::Resources: + std::transform(dataDirs.begin(), dataDirs.end(), std::back_inserter(result), + [](auto p) { return (p / "imhex" / "resources").string(); }); + return result; + case ImHexPath::Constants: + std::transform(dataDirs.begin(), dataDirs.end(), std::back_inserter(result), + [](auto p) { return (p / "imhex" / "constants").string(); }); + return result; + default: __builtin_unreachable(); + } + #endif + } + +} \ No newline at end of file diff --git a/plugins/libimhex/source/helpers/utils_mac.mm b/plugins/libimhex/source/helpers/paths_mac.mm similarity index 100% rename from plugins/libimhex/source/helpers/utils_mac.mm rename to plugins/libimhex/source/helpers/paths_mac.mm diff --git a/plugins/libimhex/source/helpers/utils.cpp b/plugins/libimhex/source/helpers/utils.cpp index cff4e43b9..38403fb93 100644 --- a/plugins/libimhex/source/helpers/utils.cpp +++ b/plugins/libimhex/source/helpers/utils.cpp @@ -7,15 +7,6 @@ #include -#if defined(OS_WINDOWS) - #include - #include -#elif defined(OS_MACOS) - #include -#elif defined(OS_LINUX) - #include -#endif - namespace hex { std::string to_string(u128 value) { @@ -209,96 +200,6 @@ namespace hex { } - std::vector getPath(ImHexPath path) { - #if defined(OS_WINDOWS) - std::string exePath(MAX_PATH, '\0'); - GetModuleFileName(nullptr, exePath.data(), exePath.length()); - auto parentDir = std::filesystem::path(exePath).parent_path(); - - std::filesystem::path appDataDir; - { - LPWSTR wAppDataPath = nullptr; - if (!SUCCEEDED(SHGetKnownFolderPath(FOLDERID_LocalAppData, KF_FLAG_CREATE, nullptr, &wAppDataPath))) - throw std::runtime_error("Failed to get APPDATA folder path"); - - appDataDir = wAppDataPath; - CoTaskMemFree(wAppDataPath); - } - - switch (path) { - case ImHexPath::Patterns: - return { (parentDir / "patterns").string() }; - case ImHexPath::PatternsInclude: - return { (parentDir / "includes").string() }; - case ImHexPath::Magic: - return { (parentDir / "magic").string() }; - case ImHexPath::Python: - return { parentDir.string() }; - case ImHexPath::Plugins: - return { (parentDir / "plugins").string() }; - case ImHexPath::Yara: - return { (parentDir / "yara").string() }; - case ImHexPath::Config: - return { (appDataDir / "imhex" / "config").string() }; - case ImHexPath::Resources: - return { (parentDir / "resources").string() }; - case ImHexPath::Constants: - return { (parentDir / "constants").string() }; - default: __builtin_unreachable(); - } - #elif defined(OS_MACOS) - return { getPathForMac(path) }; - #else - std::vector configDirs = xdg::ConfigDirs(); - std::vector dataDirs = xdg::DataDirs(); - - configDirs.insert(configDirs.begin(), xdg::ConfigHomeDir()); - dataDirs.insert(dataDirs.begin(), xdg::DataHomeDir()); - - std::vector result; - - switch (path) { - case ImHexPath::Patterns: - std::transform(dataDirs.begin(), dataDirs.end(), std::back_inserter(result), - [](auto p) { return (p / "imhex" / "patterns").string(); }); - return result; - case ImHexPath::PatternsInclude: - std::transform(dataDirs.begin(), dataDirs.end(), std::back_inserter(result), - [](auto p) { return (p / "imhex" / "includes").string(); }); - return result; - case ImHexPath::Magic: - std::transform(dataDirs.begin(), dataDirs.end(), std::back_inserter(result), - [](auto p) { return (p / "imhex" / "magic").string(); }); - return result; - case ImHexPath::Python: - std::transform(dataDirs.begin(), dataDirs.end(), std::back_inserter(result), - [](auto p) { return (p / "imhex").string(); }); - return result; - case ImHexPath::Plugins: - std::transform(dataDirs.begin(), dataDirs.end(), std::back_inserter(result), - [](auto p) { return (p / "imhex" / "plugins").string(); }); - return result; - case ImHexPath::Yara: - std::transform(dataDirs.begin(), dataDirs.end(), std::back_inserter(result), - [](auto p) { return (p / "imhex" / "yara").string(); }); - return result; - case ImHexPath::Config: - std::transform(configDirs.begin(), configDirs.end(), std::back_inserter(result), - [](auto p) { return (p / "imhex").string(); }); - return result; - case ImHexPath::Resources: - std::transform(dataDirs.begin(), dataDirs.end(), std::back_inserter(result), - [](auto p) { return (p / "imhex" / "resources").string(); }); - return result; - case ImHexPath::Constants: - std::transform(dataDirs.begin(), dataDirs.end(), std::back_inserter(result), - [](auto p) { return (p / "imhex" / "constants").string(); }); - return result; - default: __builtin_unreachable(); - } - #endif - } - void openFileBrowser(std::string_view title, DialogMode mode, const std::vector &validExtensions, const std::function &callback) { NFD::Init(); diff --git a/plugins/libimhex/source/lang/preprocessor.cpp b/plugins/libimhex/source/lang/preprocessor.cpp index 914788208..a6658980a 100644 --- a/plugins/libimhex/source/lang/preprocessor.cpp +++ b/plugins/libimhex/source/lang/preprocessor.cpp @@ -1,7 +1,7 @@ #include -#include #include +#include #include diff --git a/source/helpers/loader_script_handler.cpp b/source/helpers/loader_script_handler.cpp index a6c90d769..77146555e 100644 --- a/source/helpers/loader_script_handler.cpp +++ b/source/helpers/loader_script_handler.cpp @@ -1,6 +1,7 @@ #include "helpers/loader_script_handler.hpp" #include +#include #include #include diff --git a/source/views/view_constants.cpp b/source/views/view_constants.cpp index a16e49580..0ce122117 100644 --- a/source/views/view_constants.cpp +++ b/source/views/view_constants.cpp @@ -1,6 +1,6 @@ #include "views/view_constants.hpp" -#include +#include #include #include diff --git a/source/views/view_help.cpp b/source/views/view_help.cpp index 28eb63851..92c1c22a7 100644 --- a/source/views/view_help.cpp +++ b/source/views/view_help.cpp @@ -1,4 +1,5 @@ #include "views/view_help.hpp" +#include #include diff --git a/source/views/view_information.cpp b/source/views/view_information.cpp index 4290b1fb9..d2f91d892 100644 --- a/source/views/view_information.cpp +++ b/source/views/view_information.cpp @@ -1,7 +1,7 @@ #include "views/view_information.hpp" #include -#include +#include #include #include diff --git a/source/views/view_pattern_editor.cpp b/source/views/view_pattern_editor.cpp index ab99604fc..f0ad27eb6 100644 --- a/source/views/view_pattern_editor.cpp +++ b/source/views/view_pattern_editor.cpp @@ -3,7 +3,7 @@ #include "helpers/project_file_handler.hpp" #include #include -#include +#include #include diff --git a/source/window/window.cpp b/source/window/window.cpp index 9e53437ea..5689048c3 100644 --- a/source/window/window.cpp +++ b/source/window/window.cpp @@ -4,6 +4,7 @@ #include #include +#include #include #include