summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZhanyong Wan <wan@google.com>2011-02-11 21:24:40 +0000
committerZhanyong Wan <wan@google.com>2011-02-11 21:24:40 +0000
commit63cc3a85cc10093f83f76ea9192f77929b58569e (patch)
tree8144f00064a3c7e625fc6c7b775b243e30646b12
parent7973f350b78e0bef8567f441f3255c846f5432ac (diff)
downloadllvm-63cc3a85cc10093f83f76ea9192f77929b58569e.tar.gz
llvm-63cc3a85cc10093f83f76ea9192f77929b58569e.tar.bz2
llvm-63cc3a85cc10093f83f76ea9192f77929b58569e.tar.xz
Adds llvm::sys::path::is_separator() to test whether a char is a path separator
on the host OS. Reviewed by dgregor. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@125406 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/Support/PathV2.h6
-rw-r--r--lib/Support/PathV2.cpp25
-rw-r--r--unittests/Support/Path.cpp13
3 files changed, 32 insertions, 12 deletions
diff --git a/include/llvm/Support/PathV2.h b/include/llvm/Support/PathV2.h
index 3866e410e6..251563398f 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 3463876304..9f9dea2587 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 1f67f13e97..60d08bc92d 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<StringRef, 40> paths;
paths.push_back("");