From: Benjamin Kramer Date: Tue, 6 Oct 2015 14:45:16 +0000 (+0000) Subject: [VFS] Put the incoming name in the file status to make InMemoryFS behave more like... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1b6c8ab9d4fc236f0a4ecda5333bc4cd70be9a51;p=clang [VFS] Put the incoming name in the file status to make InMemoryFS behave more like a real FS. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@249409 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Basic/VirtualFileSystem.cpp b/lib/Basic/VirtualFileSystem.cpp index 5486331d4a..b3805b2ff9 100644 --- a/lib/Basic/VirtualFileSystem.cpp +++ b/lib/Basic/VirtualFileSystem.cpp @@ -501,7 +501,7 @@ void InMemoryFileSystem::addFile(const Twine &P, time_t ModificationTime, if (I == E) { // End of the path, create a new file. // FIXME: expose the status details in the interface. - Status Stat(Path, getNextVirtualUniqueID(), + Status Stat(P.str(), getNextVirtualUniqueID(), llvm::sys::TimeValue(ModificationTime, 0), 0, 0, Buffer->getBufferSize(), llvm::sys::fs::file_type::regular_file, diff --git a/unittests/Basic/VirtualFileSystemTest.cpp b/unittests/Basic/VirtualFileSystemTest.cpp index 0b767dd0c8..005737e9de 100644 --- a/unittests/Basic/VirtualFileSystemTest.cpp +++ b/unittests/Basic/VirtualFileSystemTest.cpp @@ -602,6 +602,19 @@ TEST_F(InMemoryFileSystemTest, DirectoryIteration) { ASSERT_EQ(vfs::directory_iterator(), I); } +TEST_F(InMemoryFileSystemTest, WorkingDirectory) { + FS.setCurrentWorkingDirectory("/b"); + FS.addFile("c", 0, MemoryBuffer::getMemBuffer("")); + + auto Stat = FS.status("/b/c"); + ASSERT_FALSE(Stat.getError()) << Stat.getError() << "\n" << FS.toString(); + ASSERT_EQ("c", Stat->getName()); + ASSERT_EQ("/b", *FS.getCurrentWorkingDirectory()); + + Stat = FS.status("c"); + ASSERT_FALSE(Stat.getError()) << Stat.getError() << "\n" << FS.toString(); +} + // NOTE: in the tests below, we use '//root/' as our root directory, since it is // a legal *absolute* path on Windows as well as *nix. class VFSFromYAMLTest : public ::testing::Test {