From b1d1f2aa06f4bf7d0a7f5a151c285a0fea0db965 Mon Sep 17 00:00:00 2001 From: "Admiral H. Curtiss" Date: Sat, 16 Apr 2022 02:01:24 +0200 Subject: [PATCH] Common/StringUtil: Add convenience function for converting paths to use forward slashes on Windows. --- Source/Core/Common/StringUtil.cpp | 17 +++++++++++++++++ Source/Core/Common/StringUtil.h | 8 ++++++++ 2 files changed, 25 insertions(+) diff --git a/Source/Core/Common/StringUtil.cpp b/Source/Core/Common/StringUtil.cpp index a752ab0e10..c498e261fd 100644 --- a/Source/Core/Common/StringUtil.cpp +++ b/Source/Core/Common/StringUtil.cpp @@ -335,6 +335,23 @@ bool SplitPath(std::string_view full_path, std::string* path, std::string* filen return true; } +void UnifyPathSeparators(std::string& path) +{ +#ifdef _WIN32 + for (char& c : path) + { + if (c == '\\') + c = '/'; + } +#endif +} + +std::string WithUnifiedPathSeparators(std::string path) +{ + UnifyPathSeparators(path); + return path; +} + std::string PathToFileName(std::string_view path) { std::string file_name, extension; diff --git a/Source/Core/Common/StringUtil.h b/Source/Core/Common/StringUtil.h index 56fa756a46..5db7cbfa37 100644 --- a/Source/Core/Common/StringUtil.h +++ b/Source/Core/Common/StringUtil.h @@ -157,9 +157,17 @@ std::vector SplitString(const std::string& str, char delim); std::string JoinStrings(const std::vector& strings, const std::string& delimiter); // "C:/Windows/winhelp.exe" to "C:/Windows/", "winhelp", ".exe" +// This requires forward slashes to be used for the path separators, even on Windows. bool SplitPath(std::string_view full_path, std::string* path, std::string* filename, std::string* extension); +// Converts the path separators of a path into forward slashes on Windows, which is assumed to be +// true for paths at various places in the codebase. +void UnifyPathSeparators(std::string& path); +std::string WithUnifiedPathSeparators(std::string path); + +// Extracts just the filename (including extension) from a full path. +// This requires forward slashes to be used for the path separators, even on Windows. std::string PathToFileName(std::string_view path); bool StringBeginsWith(std::string_view str, std::string_view begin);