Support relative paths in VFSFromYAML

Use llvm::sys::fs::make_absolute to get an absolute path before
matching. Also, allow "." directories to enable testing.  ".." is still
not supported, and will require crossing file system boundaries to
implement correctly.

llvm-svn: 202903
This commit is contained in:
Ben Langmuir
2014-03-04 22:34:50 +00:00
parent 635631306f
commit a6f8ca8c5f
2 changed files with 21 additions and 3 deletions

View File

@@ -733,8 +733,12 @@ VFSFromYAML *VFSFromYAML::create(MemoryBuffer *Buffer,
}
ErrorOr<Entry *> VFSFromYAML::lookupPath(const Twine &Path_) {
SmallVector<char, 256> Storage;
StringRef Path = Path_.toNullTerminatedStringRef(Storage);
SmallString<256> Path;
Path_.toVector(Path);
// Handle relative paths
if (error_code EC = sys::fs::make_absolute(Path))
return EC;
if (Path.empty())
return error_code(errc::invalid_argument, system_category());
@@ -753,7 +757,10 @@ ErrorOr<Entry *> VFSFromYAML::lookupPath(const Twine &Path_) {
ErrorOr<Entry *> VFSFromYAML::lookupPath(sys::path::const_iterator Start,
sys::path::const_iterator End,
Entry *From) {
// FIXME: handle . and ..
if (Start->equals("."))
++Start;
// FIXME: handle ..
if (CaseSensitive ? !Start->equals(From->getName())
: !Start->equals_lower(From->getName()))
// failure to match