TarFS
virtual TarFS::Entry* LookupEntry(const char* name);
virtual TarFS::Directory* ToTarDirectory() { return this; }
TarFS::Directory** _dir = NULL);
class Volume : public TarFS::Directory {
TarFS::Directory* Root() { return this; }
TarFS::Entry::Entry(const char* name)
TarFS::File::File(tar_header* header, const char* name)
: TarFS::Entry(name),
TarFS::File::~File()
TarFS::File::ReadAt(void* cookie, off_t pos, void* buffer, size_t bufferSize)
TarFS::File::WriteAt(void* cookie, off_t pos, const void* buffer,
TarFS::File::GetName(char* nameBuffer, size_t bufferSize) const
TarFS::File::Type() const
TarFS::File::Size() const
TarFS::File::Inode() const
TarFS::Directory::Directory(Directory* parent, const char* name)
TarFS::Entry(name),
TarFS::Directory::~Directory()
while (TarFS::Entry* entry = fEntries.Head()) {
TarFS::Directory::Open(void** _cookie, int mode)
TarFS::Directory::Close(void* cookie)
TarFS::Directory::GetName(char* nameBuffer, size_t bufferSize) const
TarFS::Entry*
TarFS::Directory::LookupEntry(const char* name)
TarFS::Entry* entry = iterator.Next();
TarFS::Directory::LookupDontTraverse(const char* name)
TarFS::Entry* entry = LookupEntry(name);
TarFS::Directory::GetNextEntry(void* _cookie, char* name, size_t size)
TarFS::Entry* entry = iterator->Next();
TarFS::Directory::GetNextNode(void* _cookie, Node** _node)
TarFS::Entry* entry = iterator->Next();
TarFS::Directory::Rewind(void* _cookie)
TarFS::Directory::AddDirectory(char* dirName, TarFS::Directory** _dir)
TarFS::Directory* dir = (entry ? entry->ToTarDirectory() : NULL);
dir = new(nothrow) TarFS::Directory(this, dirName);
TarFS::Directory::AddFile(tar_header* header)
TarFS::Directory* dir = this;
TarFS::Entry* entry;
entry = new(nothrow) TarFS::File(header, leaf);
entry = new(nothrow) TarFS::Symlink(header, leaf);
TarFS::Directory::IsEmpty()
TarFS::Directory::Inode() const
TarFS::Symlink::Symlink(tar_header* header, const char* name)
: TarFS::Entry(name),
TarFS::Symlink::~Symlink()
TarFS::Symlink::ReadAt(void* cookie, off_t pos, void* buffer, size_t bufferSize)
TarFS::Symlink::WriteAt(void* cookie, off_t pos, const void* buffer,
TarFS::Symlink::ReadLink(char* buffer, size_t bufferSize)
TarFS::Symlink::GetName(char* nameBuffer, size_t bufferSize) const
TarFS::Symlink::Type() const
TarFS::Symlink::Size() const
TarFS::Symlink::Inode() const
TarFS::Volume::Volume()
TarFS::Directory(this, "Boot from CD-ROM")
TarFS::Volume::~Volume()
TarFS::Volume::Init(boot::Partition* partition)
virtual TarFS::Directory* ToTarDirectory() { return NULL; }
typedef DoublyLinkedList<TarFS::Entry> EntryList;
TarFS::Volume::_Inflate(boot::Partition* partition, void* cookie, off_t offset,
TarFS::Volume* volume = new(nothrow) TarFS::Volume;