diff --git a/include/llvm/Support/PathV2.h b/include/llvm/Support/PathV2.h index 3866e410e62..251563398fb 100644 --- a/include/llvm/Support/PathV2.h +++ b/include/llvm/Support/PathV2.h @@ -258,6 +258,12 @@ const StringRef stem(StringRef path); /// @result The extension of \a path. const StringRef extension(StringRef path); +/// @brief Check whether the given char is a path separator on the host OS. +/// +/// @param value a character +/// @result true if \a value is a path separator character on the host OS +bool is_separator(char value); + /// @brief Has root name? /// /// root_name != "" diff --git a/lib/Support/PathV2.cpp b/lib/Support/PathV2.cpp index 34638763046..9f9dea25876 100644 --- a/lib/Support/PathV2.cpp +++ b/lib/Support/PathV2.cpp @@ -20,16 +20,7 @@ namespace { using llvm::StringRef; - - bool is_separator(const char value) { - switch(value) { -#ifdef LLVM_ON_WIN32 - case '\\': // fall through -#endif - case '/': return true; - default: return false; - } - } + using llvm::sys::path::is_separator; #ifdef LLVM_ON_WIN32 const StringRef separators = "\\/"; @@ -154,7 +145,7 @@ namespace { return end_pos; } -} +} // end unnamed namespace namespace llvm { namespace sys { @@ -483,6 +474,16 @@ const StringRef extension(StringRef path) { return fname.substr(pos); } +bool is_separator(char value) { + switch(value) { +#ifdef LLVM_ON_WIN32 + case '\\': // fall through +#endif + case '/': return true; + default: return false; + } +} + bool has_root_name(const Twine &path) { SmallString<128> path_storage; StringRef p = path.toStringRef(path_storage); @@ -737,7 +738,7 @@ error_code remove_all_r(StringRef path, file_type ft, uint32_t &count) { return success; } -} +} // end unnamed namespace error_code remove_all(const Twine &path, uint32_t &num_removed) { SmallString<128> path_storage; diff --git a/unittests/Support/Path.cpp b/unittests/Support/Path.cpp index 1f67f13e97e..60d08bc92db 100644 --- a/unittests/Support/Path.cpp +++ b/unittests/Support/Path.cpp @@ -29,6 +29,19 @@ using namespace llvm::sys; namespace { +TEST(is_separator, Works) { + EXPECT_TRUE(path::is_separator('/')); + EXPECT_FALSE(path::is_separator('\0')); + EXPECT_FALSE(path::is_separator('-')); + EXPECT_FALSE(path::is_separator(' ')); + +#ifdef LLVM_ON_WIN32 + EXPECT_TRUE(path::is_separator('\\')); +#else + EXPECT_FALSE(path::is_separator('\\')); +#endif +} + TEST(Support, Path) { SmallVector paths; paths.push_back("");