r249316 - [VFS] Add working directories to every virtual file system.
Diego Novillo via cfe-commits
cfe-commits at lists.llvm.org
Mon Oct 5 08:24:17 PDT 2015
Never mind. My llvm and clang trees were out of sync.
Diego.
On Mon, Oct 5, 2015 at 11:15 AM, Diego Novillo <dnovillo at google.com> wrote:
>
>
> On Mon, Oct 5, 2015 at 9:55 AM, Benjamin Kramer via cfe-commits <
> cfe-commits at lists.llvm.org> wrote:
>
>> Author: d0k
>> Date: Mon Oct 5 08:55:20 2015
>> New Revision: 249316
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=249316&view=rev
>> Log:
>> [VFS] Add working directories to every virtual file system.
>>
>> For RealFileSystem this is getcwd()/chdir(), the synthetic file systems
>> can
>> make up one for themselves. OverlayFileSystem now synchronizes the working
>> directories when a new FS is added to the overlay or the overlay working
>> directory is set. This allows purely artificial file systems that have
>> zero
>> ties to the underlying disks.
>>
>> Differential Revision: http://reviews.llvm.org/D13430
>>
>> Modified:
>> cfe/trunk/include/clang/Basic/VirtualFileSystem.h
>> cfe/trunk/lib/Basic/VirtualFileSystem.cpp
>> cfe/trunk/unittests/Basic/VirtualFileSystemTest.cpp
>>
>> Modified: cfe/trunk/include/clang/Basic/VirtualFileSystem.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/VirtualFileSystem.h?rev=249316&r1=249315&r2=249316&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/include/clang/Basic/VirtualFileSystem.h (original)
>> +++ cfe/trunk/include/clang/Basic/VirtualFileSystem.h Mon Oct 5 08:55:20
>> 2015
>> @@ -199,6 +199,25 @@ public:
>> /// \note The 'end' iterator is directory_iterator().
>> virtual directory_iterator dir_begin(const Twine &Dir,
>> std::error_code &EC) = 0;
>> +
>> + /// Set the working directory. This will affect all following
>> operations on
>> + /// this file system and may propagate down for nested file systems.
>> + virtual std::error_code setCurrentWorkingDirectory(const Twine &Path)
>> = 0;
>> + /// Get the working directory of this file system.
>> + virtual llvm::ErrorOr<std::string> getCurrentWorkingDirectory() const
>> = 0;
>> +
>> + /// Make \a Path an absolute path.
>> + ///
>> + /// Makes \a Path absolute using the current directory if it is not
>> already.
>> + /// An empty \a Path will result in the 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 success if \a path has been made absolute, otherwise a
>> + /// platform-specific error_code.
>> + std::error_code makeAbsolute(SmallVectorImpl<char> &Path) const;
>> };
>>
>> /// \brief Gets an \p vfs::FileSystem for the 'real' file system, as
>> seen by
>> @@ -230,6 +249,8 @@ public:
>> llvm::ErrorOr<std::unique_ptr<File>>
>> openFileForRead(const Twine &Path) override;
>> directory_iterator dir_begin(const Twine &Dir, std::error_code &EC)
>> override;
>> + llvm::ErrorOr<std::string> getCurrentWorkingDirectory() const override;
>> + std::error_code setCurrentWorkingDirectory(const Twine &Path) override;
>>
>> typedef FileSystemList::reverse_iterator iterator;
>>
>> @@ -248,6 +269,7 @@ class InMemoryDirectory;
>> /// An in-memory file system.
>> class InMemoryFileSystem : public FileSystem {
>> std::unique_ptr<detail::InMemoryDirectory> Root;
>> + std::string WorkingDirectory;
>>
>> public:
>> InMemoryFileSystem();
>> @@ -260,6 +282,13 @@ public:
>> llvm::ErrorOr<std::unique_ptr<File>>
>> openFileForRead(const Twine &Path) override;
>> directory_iterator dir_begin(const Twine &Dir, std::error_code &EC)
>> override;
>> + llvm::ErrorOr<std::string> getCurrentWorkingDirectory() const override
>> {
>> + return WorkingDirectory;
>> + }
>> + std::error_code setCurrentWorkingDirectory(const Twine &Path) override
>> {
>> + WorkingDirectory = Path.str();
>> + return std::error_code();
>> + }
>> };
>>
>> /// \brief Get a globally unique ID for a virtual file or directory.
>>
>> Modified: cfe/trunk/lib/Basic/VirtualFileSystem.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/VirtualFileSystem.cpp?rev=249316&r1=249315&r2=249316&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/lib/Basic/VirtualFileSystem.cpp (original)
>> +++ cfe/trunk/lib/Basic/VirtualFileSystem.cpp Mon Oct 5 08:55:20 2015
>> @@ -89,6 +89,14 @@ FileSystem::getBufferForFile(const llvm:
>> return (*F)->getBuffer(Name, FileSize, RequiresNullTerminator,
>> IsVolatile);
>> }
>>
>> +std::error_code FileSystem::makeAbsolute(SmallVectorImpl<char> &Path)
>> const {
>> + auto WorkingDir = getCurrentWorkingDirectory();
>> + if (!WorkingDir)
>> + return WorkingDir.getError();
>> +
>> + return llvm::sys::fs::make_absolute(WorkingDir.get(), Path);
>> +}
>>
>
> Ben,
>
> This is causing:
>
> tools/clang/lib/Basic/VirtualFileSystem.cpp:105:57: error: too many
> arguments to function call, expected single argument 'path', have 2
> arguments
> return llvm::sys::fs::make_absolute(WorkingDir.get(), Path);
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^~~~
> [...]/llvm/llvm/include/llvm/Support/FileSystem.h:280:1: note:
> 'make_absolute' declared here
> std::error_code make_absolute(SmallVectorImpl<char> &path);
> ^
> 1 error generated.
>
> Not sure which of the two parameters needs to be taken out.
>
>
> Thanks. Diego.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20151005/cc064ef7/attachment-0001.html>
More information about the cfe-commits
mailing list