From fff3dc468538c93ea111efc89b64426af7380d78 Mon Sep 17 00:00:00 2001 From: "Scott E. Graves" Date: Thu, 10 Oct 2024 09:57:47 -0500 Subject: [PATCH] updated build system --- support/src/utils/path.cpp | 17 ++++++++++++----- support/test/src/utils/path_test.cpp | 28 ++++++++++------------------ 2 files changed, 22 insertions(+), 23 deletions(-) diff --git a/support/src/utils/path.cpp b/support/src/utils/path.cpp index 5eb6c33f..43afd544 100644 --- a/support/src/utils/path.cpp +++ b/support/src/utils/path.cpp @@ -30,10 +30,13 @@ namespace { [[nodiscard]] auto resolve(std::string path) -> std::string { #if defined(_WIN32) - if (repertory::utils::string::contains(path, "~\\") || - repertory::utils::string::contains(path, "%")) { + if (repertory::utils::string::contains(path, "~\\")) { repertory::utils::string::replace(path, "~\\", "%USERPROFILE%\\"); + } else if (repertory::utils::string::contains(path, "~/")) { + repertory::utils::string::replace(path, "~/", "%USERPROFILE%\\"); + } + if (repertory::utils::string::contains(path, "%")) { auto size = ::ExpandEnvironmentStringsA(path.c_str(), nullptr, 0); std::string dest; @@ -43,6 +46,10 @@ namespace { path = dest.c_str(); } #else // !defined (_WIN32) + if (repertory::utils::string::contains(path, "~\\")) { + repertory::utils::string::replace(path, "~\\", "~/"); + } + if (repertory::utils::string::contains(path, "~/")) { std::string home{}; auto res = @@ -57,11 +64,11 @@ namespace { throw std::runtime_error("failed to getpwuid: " + res.reason); } - return repertory::utils::string::replace(path, "~/", home + "/"); + path = repertory::utils::string::replace(path, "~/", home + "/"); } #endif // defined (_WIN32) - return path; + return finalize(path); } } // namespace @@ -72,7 +79,7 @@ auto absolute(std::string_view path) -> std::string { return abs_path; } - abs_path = resolve(finalize(abs_path)); + abs_path = resolve(abs_path); #if defined(_WIN32) if (not utils::string::contains(abs_path, dot)) { return abs_path; diff --git a/support/test/src/utils/path_test.cpp b/support/test/src/utils/path_test.cpp index 4cfe3162..618183cd 100644 --- a/support/test/src/utils/path_test.cpp +++ b/support/test/src/utils/path_test.cpp @@ -387,16 +387,7 @@ TEST(utils_path, absolute) { path = utils::path::absolute(R"(\\server\share)"); EXPECT_STREQ(R"(/server/share)", path.c_str()); - - auto home_env = utils::get_environment_variable("HOME"); #endif // defined(_WIN32) - auto home = utils::path::absolute(home_env); - - path = utils::path::absolute("~/"); - EXPECT_STREQ(home.c_str(), path.c_str()); - - path = utils::path::absolute("~\\"); - EXPECT_STREQ(home.c_str(), path.c_str()); } TEST(utils_path, absolute_can_resolve_path_variables) { @@ -411,19 +402,20 @@ TEST(utils_path, absolute_can_resolve_path_variables) { static_cast(home.size())); home = utils::path::absolute(home); - auto expanded_str = utils::path::absolute("%USERPROFILE%"); - EXPECT_STREQ(home.c_str(), expanded_str.c_str()); - - expanded_str = utils::path::absolute("~\\"); - EXPECT_STREQ(home.c_str(), expanded_str.c_str()); - EXPECT_STREQ((home + home).c_str(), expanded_str.c_str()); + EXPECT_STREQ(home.c_str(), utils::path::absolute("%USERPROFILE%").c_str()); #else // !defined(_WIN32) home = std::getenv("HOME"); home = utils::path::absolute(home); - - auto expanded_str = utils::path::absolute("~/"); - EXPECT_STREQ(home.c_str(), expanded_str.c_str()); #endif // defined(_WIN32) + + auto expanded_str = utils::path::absolute("~\\"); + EXPECT_STREQ(home.c_str(), expanded_str.c_str()); + + expanded_str = utils::path::absolute("~/"); + EXPECT_STREQ(home.c_str(), expanded_str.c_str()); + + expanded_str = utils::path::absolute("~"); + EXPECT_STREQ("~", expanded_str.c_str()); } TEST(utils_path, get_parent_path) {