Skip to content

Commit

Permalink
[FileSystem] Fix regression in FileSystem::Resolve
Browse files Browse the repository at this point in the history
When I moved the resolve code from FileSpec to the FileSystem class, I
introduced a regression. If you compare the two implementations, you'll
notice that if the path doesn't exist, we should only reverse the
effects of makeAbsolute, not the effects of tilde expansion.

As a result, the logic to create the ~/.lldb directory broke, because we
would resolve the path before creating it. Because the directory didn't
exist yet, we'd call create_directories on the unresolved path, which
failed.

Differential revision: https://reviews.llvm.org/D62219

llvm-svn: 361321
  • Loading branch information
JDevlieghere authored and MrSidims committed May 24, 2019
1 parent 19c1818 commit 324fb4a
Showing 1 changed file with 12 additions and 8 deletions.
20 changes: 12 additions & 8 deletions lldb/source/Host/common/FileSystem.cpp
Expand Up @@ -241,17 +241,21 @@ void FileSystem::Resolve(SmallVectorImpl<char> &path) {
if (path.empty())
return;

// Resolve tilde.
SmallString<128> original_path(path.begin(), path.end());
// Resolve tilde in path.
SmallString<128> resolved(path.begin(), path.end());
StandardTildeExpressionResolver Resolver;
Resolver.ResolveFullPath(original_path, path);
Resolver.ResolveFullPath(llvm::StringRef(path.begin(), path.size()),
resolved);

// Try making the path absolute if it exists.
SmallString<128> absolute_path(path.begin(), path.end());
MakeAbsolute(path);
if (!Exists(path)) {
path.clear();
path.append(original_path.begin(), original_path.end());
SmallString<128> absolute(resolved.begin(), resolved.end());
MakeAbsolute(absolute);

path.clear();
if (Exists(absolute)) {
path.append(absolute.begin(), absolute.end());
} else {
path.append(resolved.begin(), resolved.end());
}
}

Expand Down

0 comments on commit 324fb4a

Please sign in to comment.