summaryrefslogtreecommitdiff
path: root/lib/Support/PathV2.cpp
diff options
context:
space:
mode:
authorMichael J. Spencer <bigcheesegs@gmail.com>2010-12-07 03:57:17 +0000
committerMichael J. Spencer <bigcheesegs@gmail.com>2010-12-07 03:57:17 +0000
commitee271d8758c8493f2cadf5b9c0ec57431565891b (patch)
tree2075d5abc1a317ff6d0160c9b74f7bc7bbae7159 /lib/Support/PathV2.cpp
parentbf60dad984e296d43a8a6b33e8c528e8c8a24394 (diff)
downloadllvm-ee271d8758c8493f2cadf5b9c0ec57431565891b.tar.gz
llvm-ee271d8758c8493f2cadf5b9c0ec57431565891b.tar.bz2
llvm-ee271d8758c8493f2cadf5b9c0ec57431565891b.tar.xz
Support/PathV2: Move make_absolute from path to fs.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@121108 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Support/PathV2.cpp')
-rw-r--r--lib/Support/PathV2.cpp112
1 files changed, 57 insertions, 55 deletions
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);