diff --git a/support/3rd_party/src/utils/path.cpp b/support/3rd_party/src/utils/path.cpp index 82eaaf1b..01a2d70c 100644 --- a/support/3rd_party/src/utils/path.cpp +++ b/support/3rd_party/src/utils/path.cpp @@ -37,25 +37,31 @@ static const std::wstring directory_seperator_str_w{ [[nodiscard]] auto resolve(std::string path) -> std::string { #if defined(_WIN32) - repertory::utils::string::replace(path, "~", "%USERPROFILE%"); + if (repertory::utils::string::contains(path, "~") || + repertory::utils::string::contains(path, "%")) { + repertory::utils::string::replace(path, "~", "%USERPROFILE%"); - std::string dest; - dest.resize(::ExpandEnvironmentStringsA(path.c_str(), nullptr, 0)); - ::ExpandEnvironmentStringsA(path.c_str(), dest.data(), - static_cast(dest.size())); - path = dest.c_str(); - return path; + std::string dest; + dest.resize(::ExpandEnvironmentStringsA(path.c_str(), nullptr, 0)); + ::ExpandEnvironmentStringsA(path.c_str(), dest.data(), + static_cast(dest.size())); + path = dest.c_str(); + } #else // !defined (_WIN32) - std::string home{}; - repertory::utils::use_getpwuid(getuid(), [&home](struct passwd *pw) { - home = (pw->pw_dir ? pw->pw_dir : ""); - if (home.empty() || ((home == "/") && (getuid() != 0))) { - home = repertory::utils::path::combine("/home", {pw->pw_name}); - } - }); + if (repertory::utils::string::contains(path, "~")) { + std::string home{}; + repertory::utils::use_getpwuid(getuid(), [&home](struct passwd *pw) { + home = (pw->pw_dir ? pw->pw_dir : ""); + if (home.empty() || ((home == "/") && (getuid() != 0))) { + home = repertory::utils::path::combine("/home", {pw->pw_name}); + } + }); - return repertory::utils::string::replace(path, "~", home); + return repertory::utils::string::replace(path, "~", home); + } #endif // defined (_WIN32) + + return path; } } // namespace