LLVM
15.0.0git
|
A file system that allows overlaying one AbstractFileSystem
on top of another.
More...
#include "llvm/Support/VirtualFileSystem.h"
Public Types | |
using | iterator = FileSystemList::reverse_iterator |
using | const_iterator = FileSystemList::const_reverse_iterator |
using | reverse_iterator = FileSystemList::iterator |
using | const_reverse_iterator = FileSystemList::const_iterator |
using | range = iterator_range< iterator > |
using | const_range = iterator_range< const_iterator > |
![]() | |
enum | PrintType { PrintType::Summary, PrintType::Contents, PrintType::RecursiveContents } |
Public Member Functions | |
OverlayFileSystem (IntrusiveRefCntPtr< FileSystem > Base) | |
void | pushOverlay (IntrusiveRefCntPtr< FileSystem > FS) |
Pushes a file system on top of the stack. More... | |
llvm::ErrorOr< Status > | status (const Twine &Path) override |
Get the status of the entry at Path , if one exists. More... | |
llvm::ErrorOr< std::unique_ptr< File > > | openFileForRead (const Twine &Path) override |
Get a File object for the file at Path , if one exists. More... | |
directory_iterator | dir_begin (const Twine &Dir, std::error_code &EC) override |
Get a directory_iterator for Dir . More... | |
llvm::ErrorOr< std::string > | getCurrentWorkingDirectory () const override |
Get the working directory of this file system. More... | |
std::error_code | setCurrentWorkingDirectory (const Twine &Path) override |
Set the working directory. More... | |
std::error_code | isLocal (const Twine &Path, bool &Result) override |
Is the file mounted on a local filesystem? More... | |
std::error_code | getRealPath (const Twine &Path, SmallVectorImpl< char > &Output) const override |
Gets real path of Path e.g. More... | |
iterator | overlays_begin () |
Get an iterator pointing to the most recently added file system. More... | |
const_iterator | overlays_begin () const |
iterator | overlays_end () |
Get an iterator pointing one-past the least recently added file system. More... | |
const_iterator | overlays_end () const |
reverse_iterator | overlays_rbegin () |
Get an iterator pointing to the least recently added file system. More... | |
const_reverse_iterator | overlays_rbegin () const |
reverse_iterator | overlays_rend () |
Get an iterator pointing one-past the most recently added file system. More... | |
const_reverse_iterator | overlays_rend () const |
range | overlays_range () |
const_range | overlays_range () const |
![]() | |
virtual | ~FileSystem () |
llvm::ErrorOr< std::unique_ptr< llvm::MemoryBuffer > > | getBufferForFile (const Twine &Name, int64_t FileSize=-1, bool RequiresNullTerminator=true, bool IsVolatile=false) |
This is a convenience method that opens a file, gets its content and then closes the file. More... | |
bool | exists (const Twine &Path) |
Check whether a file exists. Provided for convenience. More... | |
virtual std::error_code | makeAbsolute (SmallVectorImpl< char > &Path) const |
Make Path an absolute path. More... | |
void | print (raw_ostream &OS, PrintType Type=PrintType::Contents, unsigned IndentLevel=0) const |
LLVM_DUMP_METHOD void | dump () const |
![]() | |
void | Retain () const |
void | Release () const |
Protected Member Functions | |
void | printImpl (raw_ostream &OS, PrintType Type, unsigned IndentLevel) const override |
![]() | |
void | printIndent (raw_ostream &OS, unsigned IndentLevel) const |
![]() | |
ThreadSafeRefCountedBase ()=default | |
ThreadSafeRefCountedBase (const ThreadSafeRefCountedBase &) | |
ThreadSafeRefCountedBase & | operator= (const ThreadSafeRefCountedBase &)=delete |
~ThreadSafeRefCountedBase () | |
A file system that allows overlaying one AbstractFileSystem
on top of another.
Consists of a stack of >=1 FileSystem
objects, which are treated as being one merged file system. When there is a directory that exists in more than one file system, the OverlayFileSystem
contains a directory containing the union of their contents. The attributes (permissions, etc.) of the top-most (most recently added) directory are used. When there is a file that exists in more than one file system, the file in the top-most file system overrides the other(s).
Definition at line 366 of file VirtualFileSystem.h.
using llvm::vfs::OverlayFileSystem::const_iterator = FileSystemList::const_reverse_iterator |
Definition at line 390 of file VirtualFileSystem.h.
Definition at line 394 of file VirtualFileSystem.h.
Definition at line 392 of file VirtualFileSystem.h.
using llvm::vfs::OverlayFileSystem::iterator = FileSystemList::reverse_iterator |
Definition at line 389 of file VirtualFileSystem.h.
Definition at line 393 of file VirtualFileSystem.h.
Definition at line 391 of file VirtualFileSystem.h.
OverlayFileSystem::OverlayFileSystem | ( | IntrusiveRefCntPtr< FileSystem > | Base | ) |
Definition at line 419 of file VirtualFileSystem.cpp.
References move.
|
overridevirtual |
Get a directory_iterator for Dir
.
Implements llvm::vfs::FileSystem.
Definition at line 577 of file VirtualFileSystem.cpp.
References llvm::Twine::str().
|
overridevirtual |
Get the working directory of this file system.
Implements llvm::vfs::FileSystem.
Definition at line 452 of file VirtualFileSystem.cpp.
Referenced by pushOverlay().
|
overridevirtual |
Gets real path of Path
e.g.
collapse all . and .. patterns, resolve symlinks. For real file system, this uses llvm::sys::fs::real_path
. This returns errc::operation_not_permitted if not implemented by subclass.
Reimplemented from llvm::vfs::FileSystem.
Definition at line 473 of file VirtualFileSystem.cpp.
References llvm::X86AS::FS, and llvm::no_such_file_or_directory.
Is the file mounted on a local filesystem?
Reimplemented from llvm::vfs::FileSystem.
Definition at line 465 of file VirtualFileSystem.cpp.
References llvm::X86AS::FS, and llvm::no_such_file_or_directory.
|
overridevirtual |
Get a File
object for the file at Path
, if one exists.
Implements llvm::vfs::FileSystem.
Definition at line 441 of file VirtualFileSystem.cpp.
References E, I, llvm::make_error_code(), llvm::no_such_file_or_directory, overlays_begin(), and overlays_end().
|
inline |
Get an iterator pointing to the most recently added file system.
Definition at line 397 of file VirtualFileSystem.h.
Referenced by openFileForRead(), and status().
|
inline |
Definition at line 398 of file VirtualFileSystem.h.
|
inline |
Get an iterator pointing one-past the least recently added file system.
Definition at line 401 of file VirtualFileSystem.h.
Referenced by openFileForRead(), and status().
|
inline |
Definition at line 402 of file VirtualFileSystem.h.
|
inline |
Definition at line 412 of file VirtualFileSystem.h.
References llvm::reverse().
Referenced by printImpl().
|
inline |
Definition at line 413 of file VirtualFileSystem.h.
References llvm::reverse().
|
inline |
Get an iterator pointing to the least recently added file system.
Definition at line 405 of file VirtualFileSystem.h.
|
inline |
Definition at line 406 of file VirtualFileSystem.h.
|
inline |
Get an iterator pointing one-past the most recently added file system.
Definition at line 409 of file VirtualFileSystem.h.
|
inline |
Definition at line 410 of file VirtualFileSystem.h.
|
overrideprotectedvirtual |
Reimplemented from llvm::vfs::FileSystem.
Definition at line 481 of file VirtualFileSystem.cpp.
References llvm::vfs::FileSystem::Contents, llvm::X86AS::FS, overlays_range(), llvm::vfs::FileSystem::printIndent(), and llvm::vfs::FileSystem::Summary.
void OverlayFileSystem::pushOverlay | ( | IntrusiveRefCntPtr< FileSystem > | FS | ) |
Pushes a file system on top of the stack.
Definition at line 423 of file VirtualFileSystem.cpp.
References llvm::X86AS::FS, get, and getCurrentWorkingDirectory().
Set the working directory.
This will affect all following operations on this file system and may propagate down for nested file systems.
Implements llvm::vfs::FileSystem.
Definition at line 458 of file VirtualFileSystem.cpp.
References llvm::X86AS::FS.
Get the status of the entry at Path
, if one exists.
Implements llvm::vfs::FileSystem.
Definition at line 430 of file VirtualFileSystem.cpp.
References E, I, llvm::make_error_code(), llvm::no_such_file_or_directory, overlays_begin(), and overlays_end().