forked from OSchip/llvm-project
Move twice-repeated clang path operation into a new function.
And make it more robust in the edge case of exactly "./" as input. llvm-svn: 246711
This commit is contained in:
parent
9550590711
commit
a26be4a946
|
@ -401,6 +401,12 @@ bool is_absolute(const Twine &path);
|
|||
/// @result True if the path is relative, false if it is not.
|
||||
bool is_relative(const Twine &path);
|
||||
|
||||
/// @brief Remove redundant leading "./" pieces and consecutive separators.
|
||||
///
|
||||
/// @param path Input path.
|
||||
/// @result The cleaned-up \a path.
|
||||
StringRef remove_leading_dotslash(StringRef path);
|
||||
|
||||
} // end namespace path
|
||||
} // end namespace sys
|
||||
} // end namespace llvm
|
||||
|
|
|
@ -661,8 +661,16 @@ bool is_absolute(const Twine &path) {
|
|||
return rootDir && rootName;
|
||||
}
|
||||
|
||||
bool is_relative(const Twine &path) {
|
||||
return !is_absolute(path);
|
||||
bool is_relative(const Twine &path) { return !is_absolute(path); }
|
||||
|
||||
StringRef remove_leading_dotslash(StringRef Path) {
|
||||
// Remove leading "./" (or ".//" or "././" etc.)
|
||||
while (Path.size() > 2 && Path[0] == '.' && is_separator(Path[1])) {
|
||||
Path = Path.substr(2);
|
||||
while (Path.size() > 0 && is_separator(Path[0]))
|
||||
Path = Path.substr(1);
|
||||
}
|
||||
return Path;
|
||||
}
|
||||
|
||||
} // end namespace path
|
||||
|
|
|
@ -789,4 +789,14 @@ TEST(Support, NormalizePath) {
|
|||
|
||||
#undef EXPECT_PATH_IS
|
||||
}
|
||||
|
||||
TEST(Support, RemoveLeadingDotSlash) {
|
||||
StringRef Path1("././/foolz/wat");
|
||||
StringRef Path2("./////");
|
||||
|
||||
Path1 = path::remove_leading_dotslash(Path1);
|
||||
EXPECT_EQ(Path1, "foolz/wat");
|
||||
Path2 = path::remove_leading_dotslash(Path2);
|
||||
EXPECT_EQ(Path2, "");
|
||||
}
|
||||
} // anonymous namespace
|
||||
|
|
Loading…
Reference in New Issue