summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/llvm/Support/FileSystem.h13
-rw-r--r--include/llvm/Support/PathV2.h13
-rw-r--r--lib/Support/PathV2.cpp112
-rw-r--r--unittests/Support/Path.cpp2
4 files changed, 71 insertions, 69 deletions
diff --git a/include/llvm/Support/FileSystem.h b/include/llvm/Support/FileSystem.h
index 5b8e2eab8e..121e77066e 100644
--- a/include/llvm/Support/FileSystem.h
+++ b/include/llvm/Support/FileSystem.h
@@ -104,6 +104,19 @@ public:
/// @name Physical Operators
/// @{
+/// @brief Make \a path an absolute path.
+///
+/// Makes \a path absolute using the current directory if it is not already. An
+/// empty \a path will result in the current directory.
+///
+/// /absolute/path => /absolute/path
+/// relative/../path => <current-directory>/relative/../path
+///
+/// @param path A path that is modified to be an absolute path.
+/// @returns errc::success if \a path has been made absolute, otherwise a
+/// platform specific error_code.
+error_code make_absolute(SmallVectorImpl<char> &path);
+
/// @brief Copy the file at \a from to the path \a to.
///
/// @param from The path to copy the file from.
diff --git a/include/llvm/Support/PathV2.h b/include/llvm/Support/PathV2.h
index 79760d1db5..e2006fe266 100644
--- a/include/llvm/Support/PathV2.h
+++ b/include/llvm/Support/PathV2.h
@@ -117,19 +117,6 @@ inline reverse_iterator rend(const StringRef &path) {
/// @name Lexical Modifiers
/// @{
-/// @brief Make \a path an absolute path.
-///
-/// Makes \a path absolute using the current directory if it is not already. An
-/// empty \a path will result in the current directory.
-///
-/// /absolute/path => /absolute/path
-/// relative/../path => <current-directory>/relative/../path
-///
-/// @param path A path that is modified to be an absolute path.
-/// @returns errc::success if \a path has been made absolute, otherwise a
-/// platform specific error_code.
-error_code make_absolute(SmallVectorImpl<char> &path);
-
/// @brief Remove the last component from \a path unless it is the root dir.
///
/// directory/filename.cpp => directory/
diff --git a/lib/Support/PathV2.cpp b/lib/Support/PathV2.cpp
index 7b99287e1e..9f522cf004 100644
--- a/lib/Support/PathV2.cpp
+++ b/lib/Support/PathV2.cpp
@@ -424,61 +424,6 @@ error_code append(SmallVectorImpl<char> &path, const Twine &a,
return success;
}
-error_code make_absolute(SmallVectorImpl<char> &path) {
- StringRef p(path.data(), path.size());
-
- bool rootName = false, rootDirectory = false;
- if (error_code ec = has_root_name(p, rootName)) return ec;
- if (error_code ec = has_root_directory(p, rootDirectory)) return ec;
-
- // Already absolute.
- if (rootName && rootDirectory)
- return success;
-
- // All of the following conditions will need the current directory.
- SmallString<128> current_dir;
- if (error_code ec = fs::current_path(current_dir)) return ec;
-
- // Relative path. Prepend the current directory.
- if (!rootName && !rootDirectory) {
- // Append path to the current directory.
- if (error_code ec = append(current_dir, p)) return ec;
- // Set path to the result.
- path.swap(current_dir);
- return success;
- }
-
- if (!rootName && rootDirectory) {
- StringRef cdrn;
- if (error_code ec = root_name(current_dir, cdrn)) return ec;
- SmallString<128> curDirRootName(cdrn.begin(), cdrn.end());
- if (error_code ec = append(curDirRootName, p)) return ec;
- // Set path to the result.
- path.swap(curDirRootName);
- return success;
- }
-
- if (rootName && !rootDirectory) {
- StringRef pRootName;
- StringRef bRootDirectory;
- StringRef bRelativePath;
- StringRef pRelativePath;
- if (error_code ec = root_name(p, pRootName)) return ec;
- if (error_code ec = root_directory(current_dir, bRootDirectory)) return ec;
- if (error_code ec = relative_path(current_dir, bRelativePath)) return ec;
- if (error_code ec = relative_path(p, pRelativePath)) return ec;
-
- SmallString<128> res;
- if (error_code ec = append(res, pRootName, bRootDirectory,
- bRelativePath, pRelativePath)) return ec;
- path.swap(res);
- return success;
- }
-
- llvm_unreachable("All rootName and rootDirectory combinations should have "
- "occurred above!");
-}
-
error_code parent_path(const StringRef &path, StringRef &result) {
size_t end_pos = parent_path_end(path);
if (end_pos == StringRef::npos)
@@ -673,6 +618,63 @@ error_code is_relative(const Twine &path, bool &result) {
namespace fs {
+error_code make_absolute(SmallVectorImpl<char> &path) {
+ StringRef p(path.data(), path.size());
+
+ bool rootName = false, rootDirectory = false;
+ if (error_code ec = path::has_root_name(p, rootName)) return ec;
+ if (error_code ec = path::has_root_directory(p, rootDirectory)) return ec;
+
+ // Already absolute.
+ if (rootName && rootDirectory)
+ return success;
+
+ // All of the following conditions will need the current directory.
+ SmallString<128> current_dir;
+ if (error_code ec = current_path(current_dir)) return ec;
+
+ // Relative path. Prepend the current directory.
+ if (!rootName && !rootDirectory) {
+ // Append path to the current directory.
+ if (error_code ec = path::append(current_dir, p)) return ec;
+ // Set path to the result.
+ path.swap(current_dir);
+ return success;
+ }
+
+ if (!rootName && rootDirectory) {
+ StringRef cdrn;
+ if (error_code ec = path::root_name(current_dir, cdrn)) return ec;
+ SmallString<128> curDirRootName(cdrn.begin(), cdrn.end());
+ if (error_code ec = path::append(curDirRootName, p)) return ec;
+ // Set path to the result.
+ path.swap(curDirRootName);
+ return success;
+ }
+
+ if (rootName && !rootDirectory) {
+ StringRef pRootName;
+ StringRef bRootDirectory;
+ StringRef bRelativePath;
+ StringRef pRelativePath;
+ if (error_code ec = path::root_name(p, pRootName)) return ec;
+ if (error_code ec = path::root_directory(current_dir, bRootDirectory))
+ return ec;
+ if (error_code ec = path::relative_path(current_dir, bRelativePath))
+ return ec;
+ if (error_code ec = path::relative_path(p, pRelativePath)) return ec;
+
+ SmallString<128> res;
+ if (error_code ec = path::append(res, pRootName, bRootDirectory,
+ bRelativePath, pRelativePath)) return ec;
+ path.swap(res);
+ return success;
+ }
+
+ llvm_unreachable("All rootName and rootDirectory combinations should have "
+ "occurred above!");
+}
+
error_code create_directories(const Twine &path, bool &existed) {
SmallString<128> path_storage;
StringRef p = path.toStringRef(path_storage);
diff --git a/unittests/Support/Path.cpp b/unittests/Support/Path.cpp
index 76a16a351c..cd44bbe5b9 100644
--- a/unittests/Support/Path.cpp
+++ b/unittests/Support/Path.cpp
@@ -104,7 +104,7 @@ TEST(Support, Path) {
SmallString<16> temp_store;
temp_store = *i;
- ASSERT_FALSE(path::make_absolute(temp_store));
+ ASSERT_FALSE(fs::make_absolute(temp_store));
temp_store = *i;
ASSERT_FALSE(path::remove_filename(temp_store));