forked from OSchip/llvm-project
[Support] Add a version of fs::make_absolute with a custom CWD.
This will be used soon from clang. llvm-svn: 249309
This commit is contained in:
parent
eda554a9b4
commit
ae1d59967d
|
@ -266,6 +266,20 @@ private:
|
|||
/// @name Physical Operators
|
||||
/// @{
|
||||
|
||||
/// @brief Make \a path an absolute path.
|
||||
///
|
||||
/// Makes \a path absolute using the \a current_directory if it is not already.
|
||||
/// An empty \a path will result in the \a 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.
|
||||
std::error_code make_absolute(const Twine ¤t_directory,
|
||||
SmallVectorImpl<char> &path);
|
||||
|
||||
/// @brief Make \a path an absolute path.
|
||||
///
|
||||
/// Makes \a path absolute using the current directory if it is not already. An
|
||||
|
|
|
@ -740,7 +740,9 @@ std::error_code createUniqueDirectory(const Twine &Prefix,
|
|||
true, 0, FS_Dir);
|
||||
}
|
||||
|
||||
std::error_code make_absolute(SmallVectorImpl<char> &path) {
|
||||
static std::error_code make_absolute(const Twine ¤t_directory,
|
||||
SmallVectorImpl<char> &path,
|
||||
bool use_current_directory) {
|
||||
StringRef p(path.data(), path.size());
|
||||
|
||||
bool rootDirectory = path::has_root_directory(p),
|
||||
|
@ -756,7 +758,9 @@ std::error_code make_absolute(SmallVectorImpl<char> &path) {
|
|||
|
||||
// All of the following conditions will need the current directory.
|
||||
SmallString<128> current_dir;
|
||||
if (std::error_code ec = current_path(current_dir))
|
||||
if (use_current_directory)
|
||||
current_directory.toVector(current_dir);
|
||||
else if (std::error_code ec = current_path(current_dir))
|
||||
return ec;
|
||||
|
||||
// Relative path. Prepend the current directory.
|
||||
|
@ -793,6 +797,15 @@ std::error_code make_absolute(SmallVectorImpl<char> &path) {
|
|||
"occurred above!");
|
||||
}
|
||||
|
||||
std::error_code make_absolute(const Twine ¤t_directory,
|
||||
SmallVectorImpl<char> &path) {
|
||||
return make_absolute(current_directory, path, true);
|
||||
}
|
||||
|
||||
std::error_code make_absolute(SmallVectorImpl<char> &path) {
|
||||
return make_absolute(Twine(), path, false);
|
||||
}
|
||||
|
||||
std::error_code create_directories(const Twine &Path, bool IgnoreExisting,
|
||||
perms Perms) {
|
||||
SmallString<128> PathStorage;
|
||||
|
|
|
@ -150,6 +150,10 @@ TEST(Support, Path) {
|
|||
|
||||
path::native(*i, temp_store);
|
||||
}
|
||||
|
||||
SmallString<32> Relative("foo.cpp");
|
||||
ASSERT_NO_ERROR(sys::fs::make_absolute("/root", Relative));
|
||||
ASSERT_EQ("/root/foo.cpp", Relative);
|
||||
}
|
||||
|
||||
TEST(Support, RelativePathIterator) {
|
||||
|
|
Loading…
Reference in New Issue