]> granicus.if.org Git - clang/commitdiff
[VFS] Also drop '.' when adding files to an in-memory FS.
authorBenjamin Kramer <benny.kra@googlemail.com>
Wed, 7 Oct 2015 08:32:50 +0000 (08:32 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Wed, 7 Oct 2015 08:32:50 +0000 (08:32 +0000)
Otherwise we won't be able to find them later.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@249525 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Basic/VirtualFileSystem.cpp
unittests/Basic/VirtualFileSystemTest.cpp

index b3805b2ff9203a904a0f806e39904f8b7b4ad5ab..b5bf33fee844ab39733e91e382f0b081bf8e82dc 100644 (file)
@@ -495,6 +495,13 @@ void InMemoryFileSystem::addFile(const Twine &P, time_t ModificationTime,
   auto I = llvm::sys::path::begin(Path), E = llvm::sys::path::end(Path);
   while (true) {
     StringRef Name = *I;
+    // Skip over ".".
+    // FIXME: Also handle "..".
+    if (Name == ".") {
+      ++I;
+      continue;
+    }
+
     detail::InMemoryNode *Node = Dir->getChild(Name);
     ++I;
     if (!Node) {
index cca99a947307b377030336cee7880712ce181e56..6ed811f22f3f9725b95d101534623841935b0a01 100644 (file)
@@ -568,6 +568,7 @@ TEST_F(InMemoryFileSystemTest, OverlayFileNoOwn) {
 
 TEST_F(InMemoryFileSystemTest, OpenFileForRead) {
   FS.addFile("/a", 0, MemoryBuffer::getMemBuffer("a"));
+  FS.addFile("././c", 0, MemoryBuffer::getMemBuffer("c"));
   auto File = FS.openFileForRead("/a");
   ASSERT_EQ("a", (*(*File)->getBuffer("ignored"))->getBuffer());
   File = FS.openFileForRead("/a"); // Open again.
@@ -578,6 +579,8 @@ TEST_F(InMemoryFileSystemTest, OpenFileForRead) {
   ASSERT_EQ(File.getError(), errc::invalid_argument) << FS.toString();
   File = FS.openFileForRead("/b");
   ASSERT_EQ(File.getError(), errc::no_such_file_or_directory) << FS.toString();
+  File = FS.openFileForRead("./c");
+  ASSERT_EQ("c", (*(*File)->getBuffer("ignored"))->getBuffer());
 }
 
 TEST_F(InMemoryFileSystemTest, DirectoryIteration) {