From ee271d8758c8493f2cadf5b9c0ec57431565891b Mon Sep 17 00:00:00 2001 From: "Michael J. Spencer" Date: Tue, 7 Dec 2010 03:57:17 +0000 Subject: 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 --- lib/Support/PathV2.cpp | 112 +++++++++++++++++++++++++------------------------ 1 file changed, 57 insertions(+), 55 deletions(-) (limited to 'lib/Support/PathV2.cpp') 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 &path, const Twine &a, return success; } -error_code make_absolute(SmallVectorImpl &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 &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); -- cgit v1.2.3