1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 19:17:44 +00:00

Some more renaming:

FileSystem -> FS
SyntheticFileSystem -> SynthFS
ProcFileSystem -> ProcFS
Ext2FileSystem -> Ext2FS
Ext2Inode -> Ext2FSInode
This commit is contained in:
Andreas Kling 2018-11-15 17:13:10 +01:00
parent eced5f11e3
commit 2529925fe9
16 changed files with 187 additions and 187 deletions

View file

@ -6,25 +6,25 @@
#include "StdLib.h" #include "StdLib.h"
#include "i386.h" #include "i386.h"
static ProcFileSystem* s_the; static ProcFS* s_the;
ProcFileSystem& ProcFileSystem::the() ProcFS& ProcFS::the()
{ {
ASSERT(s_the); ASSERT(s_the);
return *s_the; return *s_the;
} }
RetainPtr<ProcFileSystem> ProcFileSystem::create() RetainPtr<ProcFS> ProcFS::create()
{ {
return adopt(*new ProcFileSystem); return adopt(*new ProcFS);
} }
ProcFileSystem::ProcFileSystem() ProcFS::ProcFS()
{ {
s_the = this; s_the = this;
} }
ProcFileSystem::~ProcFileSystem() ProcFS::~ProcFS()
{ {
} }
@ -147,7 +147,7 @@ ByteBuffer procfs$pid_cwd(Process& process)
return VFS::the().absolute_path(*inode).toByteBuffer(); return VFS::the().absolute_path(*inode).toByteBuffer();
} }
void ProcFileSystem::addProcess(Process& process) void ProcFS::addProcess(Process& process)
{ {
InterruptDisabler disabler; InterruptDisabler disabler;
char buf[16]; char buf[16];
@ -163,7 +163,7 @@ void ProcFileSystem::addProcess(Process& process)
addFile(create_generated_file("cwd", [&process] { return procfs$pid_cwd(process); }, 00120777), dir.index()); addFile(create_generated_file("cwd", [&process] { return procfs$pid_cwd(process); }, 00120777), dir.index());
} }
void ProcFileSystem::removeProcess(Process& process) void ProcFS::removeProcess(Process& process)
{ {
InterruptDisabler disabler; InterruptDisabler disabler;
auto pid = process.pid(); auto pid = process.pid();
@ -354,9 +354,9 @@ ByteBuffer procfs$vnodes()
return buffer; return buffer;
} }
bool ProcFileSystem::initialize() bool ProcFS::initialize()
{ {
SyntheticFileSystem::initialize(); SynthFS::initialize();
addFile(create_generated_file("mm", procfs$mm)); addFile(create_generated_file("mm", procfs$mm));
addFile(create_generated_file("regions", procfs$regions)); addFile(create_generated_file("regions", procfs$regions));
addFile(create_generated_file("mounts", procfs$mounts)); addFile(create_generated_file("mounts", procfs$mounts));
@ -367,7 +367,7 @@ bool ProcFileSystem::initialize()
return true; return true;
} }
const char* ProcFileSystem::class_name() const const char* ProcFS::class_name() const
{ {
return "procfs"; return "procfs";
} }

View file

@ -5,12 +5,12 @@
class Process; class Process;
class ProcFileSystem final : public SyntheticFileSystem { class ProcFS final : public SynthFS {
public: public:
static ProcFileSystem& the() PURE; static ProcFS& the() PURE;
virtual ~ProcFileSystem() override; virtual ~ProcFS() override;
static RetainPtr<ProcFileSystem> create(); static RetainPtr<ProcFS> create();
virtual bool initialize() override; virtual bool initialize() override;
virtual const char* class_name() const override; virtual const char* class_name() const override;
@ -19,7 +19,7 @@ public:
void removeProcess(Process&); void removeProcess(Process&);
private: private:
ProcFileSystem(); ProcFS();
HashMap<pid_t, InodeIndex> m_pid2inode; HashMap<pid_t, InodeIndex> m_pid2inode;
}; };

View file

@ -274,7 +274,7 @@ Process* Process::fork(RegisterDump& regs)
dbgprintf("fork: child will begin executing at %w:%x with stack %w:%x\n", child->m_tss.cs, child->m_tss.eip, child->m_tss.ss, child->m_tss.esp); dbgprintf("fork: child will begin executing at %w:%x with stack %w:%x\n", child->m_tss.cs, child->m_tss.eip, child->m_tss.ss, child->m_tss.esp);
#endif #endif
ProcFileSystem::the().addProcess(*child); ProcFS::the().addProcess(*child);
{ {
InterruptDisabler disabler; InterruptDisabler disabler;
@ -498,7 +498,7 @@ Process* Process::create_user_process(const String& path, uid_t uid, gid_t gid,
if (error != 0) if (error != 0)
return nullptr; return nullptr;
ProcFileSystem::the().addProcess(*process); ProcFS::the().addProcess(*process);
{ {
InterruptDisabler disabler; InterruptDisabler disabler;
@ -561,7 +561,7 @@ Process* Process::create_kernel_process(void (*e)(), String&& name)
g_processes->prepend(process); g_processes->prepend(process);
system.nprocess++; system.nprocess++;
} }
ProcFileSystem::the().addProcess(*process); ProcFS::the().addProcess(*process);
#ifdef TASK_DEBUG #ifdef TASK_DEBUG
kprintf("Kernel process %u (%s) spawned @ %p\n", process->pid(), process->name().characters(), process->m_tss.eip); kprintf("Kernel process %u (%s) spawned @ %p\n", process->pid(), process->name().characters(), process->m_tss.eip);
#endif #endif
@ -691,7 +691,7 @@ Process::Process(String&& name, uid_t uid, gid_t gid, pid_t ppid, RingLevel ring
Process::~Process() Process::~Process()
{ {
InterruptDisabler disabler; InterruptDisabler disabler;
ProcFileSystem::the().removeProcess(*this); ProcFS::the().removeProcess(*this);
system.nprocess--; system.nprocess--;
gdt_free_entry(selector()); gdt_free_entry(selector());

View file

@ -195,7 +195,7 @@ static void init_stage2()
vfs->register_character_device(*tty3); vfs->register_character_device(*tty3);
auto dev_hd0 = IDEDiskDevice::create(); auto dev_hd0 = IDEDiskDevice::create();
auto e2fs = Ext2FileSystem::create(dev_hd0.copyRef()); auto e2fs = Ext2FS::create(dev_hd0.copyRef());
e2fs->initialize(); e2fs->initialize();
vfs->mount_root(e2fs.copyRef()); vfs->mount_root(e2fs.copyRef());
@ -214,7 +214,7 @@ static void init_stage2()
} }
#endif #endif
vfs->mount(ProcFileSystem::the(), "/proc"); vfs->mount(ProcFS::the(), "/proc");
Vector<String> environment; Vector<String> environment;
environment.append("TERM=ansi"); environment.append("TERM=ansi");
@ -280,7 +280,7 @@ void init()
kprintf("%u kB base memory\n", base_memory); kprintf("%u kB base memory\n", base_memory);
kprintf("%u kB extended memory\n", ext_memory); kprintf("%u kB extended memory\n", ext_memory);
auto procfs = ProcFileSystem::create(); auto procfs = ProcFS::create();
procfs->initialize(); procfs->initialize();
Process::initialize(); Process::initialize();

View file

@ -9,17 +9,17 @@ typedef int InterruptDisabler;
//#define DBFS_DEBUG //#define DBFS_DEBUG
#define BLOCK_CACHE #define BLOCK_CACHE
DiskBackedFileSystem::DiskBackedFileSystem(RetainPtr<DiskDevice>&& device) DiskBackedFS::DiskBackedFS(RetainPtr<DiskDevice>&& device)
: m_device(move(device)) : m_device(move(device))
{ {
ASSERT(m_device); ASSERT(m_device);
} }
DiskBackedFileSystem::~DiskBackedFileSystem() DiskBackedFS::~DiskBackedFS()
{ {
} }
bool DiskBackedFileSystem::writeBlock(unsigned index, const ByteBuffer& data) bool DiskBackedFS::writeBlock(unsigned index, const ByteBuffer& data)
{ {
ASSERT(data.size() == blockSize()); ASSERT(data.size() == blockSize());
#ifdef DBFS_DEBUG #ifdef DBFS_DEBUG
@ -29,7 +29,7 @@ bool DiskBackedFileSystem::writeBlock(unsigned index, const ByteBuffer& data)
return device().write(baseOffset, blockSize(), data.pointer()); return device().write(baseOffset, blockSize(), data.pointer());
} }
bool DiskBackedFileSystem::writeBlocks(unsigned index, unsigned count, const ByteBuffer& data) bool DiskBackedFS::writeBlocks(unsigned index, unsigned count, const ByteBuffer& data)
{ {
#ifdef DBFS_DEBUG #ifdef DBFS_DEBUG
kprintf("DiskBackedFileSystem::writeBlocks %u x%u\n", index, count); kprintf("DiskBackedFileSystem::writeBlocks %u x%u\n", index, count);
@ -38,7 +38,7 @@ bool DiskBackedFileSystem::writeBlocks(unsigned index, unsigned count, const Byt
return device().write(baseOffset, count * blockSize(), data.pointer()); return device().write(baseOffset, count * blockSize(), data.pointer());
} }
ByteBuffer DiskBackedFileSystem::readBlock(unsigned index) const ByteBuffer DiskBackedFS::readBlock(unsigned index) const
{ {
#ifdef DBFS_DEBUG #ifdef DBFS_DEBUG
kprintf("DiskBackedFileSystem::readBlock %u\n", index); kprintf("DiskBackedFileSystem::readBlock %u\n", index);
@ -75,7 +75,7 @@ ByteBuffer DiskBackedFileSystem::readBlock(unsigned index) const
return buffer; return buffer;
} }
ByteBuffer DiskBackedFileSystem::readBlocks(unsigned index, unsigned count) const ByteBuffer DiskBackedFS::readBlocks(unsigned index, unsigned count) const
{ {
if (!count) if (!count)
return nullptr; return nullptr;
@ -95,7 +95,7 @@ ByteBuffer DiskBackedFileSystem::readBlocks(unsigned index, unsigned count) cons
return blocks; return blocks;
} }
void DiskBackedFileSystem::setBlockSize(unsigned blockSize) void DiskBackedFS::setBlockSize(unsigned blockSize)
{ {
if (blockSize == m_blockSize) if (blockSize == m_blockSize)
return; return;
@ -103,7 +103,7 @@ void DiskBackedFileSystem::setBlockSize(unsigned blockSize)
invalidateCaches(); invalidateCaches();
} }
void DiskBackedFileSystem::invalidateCaches() void DiskBackedFS::invalidateCaches()
{ {
LOCKER(m_blockCacheLock); LOCKER(m_blockCacheLock);
InterruptDisabler disabler; InterruptDisabler disabler;

View file

@ -5,9 +5,9 @@
#include <AK/HashMap.h> #include <AK/HashMap.h>
#include <AK/Lock.h> #include <AK/Lock.h>
class DiskBackedFileSystem : public FileSystem { class DiskBackedFS : public FS {
public: public:
virtual ~DiskBackedFileSystem() override; virtual ~DiskBackedFS() override;
DiskDevice& device() { return *m_device; } DiskDevice& device() { return *m_device; }
const DiskDevice& device() const { return *m_device; } const DiskDevice& device() const { return *m_device; }
@ -15,7 +15,7 @@ public:
unsigned blockSize() const { return m_blockSize; } unsigned blockSize() const { return m_blockSize; }
protected: protected:
explicit DiskBackedFileSystem(RetainPtr<DiskDevice>&&); explicit DiskBackedFS(RetainPtr<DiskDevice>&&);
void setBlockSize(unsigned); void setBlockSize(unsigned);
void invalidateCaches(); void invalidateCaches();

View file

@ -11,14 +11,14 @@
//#define EXT2_DEBUG //#define EXT2_DEBUG
class Ext2FileSystem::CachedExt2InodeImpl : public Retainable<CachedExt2InodeImpl> { class Ext2FS::CachedExt2InodeImpl : public Retainable<CachedExt2InodeImpl> {
public: public:
CachedExt2InodeImpl(OwnPtr<ext2_inode>&& e2i) : e2inode(move(e2i)) { } CachedExt2InodeImpl(OwnPtr<ext2_inode>&& e2i) : e2inode(move(e2i)) { }
~CachedExt2InodeImpl() { } ~CachedExt2InodeImpl() { }
OwnPtr<ext2_inode> e2inode; OwnPtr<ext2_inode> e2inode;
}; };
class Ext2FileSystem::CachedExt2Inode { class Ext2FS::CachedExt2Inode {
public: public:
const ext2_inode* operator->() const { return ptr->e2inode.ptr(); } const ext2_inode* operator->() const { return ptr->e2inode.ptr(); }
const ext2_inode& operator*() const { return *ptr->e2inode; } const ext2_inode& operator*() const { return *ptr->e2inode; }
@ -36,21 +36,21 @@ public:
RetainPtr<CachedExt2InodeImpl> ptr; RetainPtr<CachedExt2InodeImpl> ptr;
}; };
RetainPtr<Ext2FileSystem> Ext2FileSystem::create(RetainPtr<DiskDevice>&& device) RetainPtr<Ext2FS> Ext2FS::create(RetainPtr<DiskDevice>&& device)
{ {
return adopt(*new Ext2FileSystem(move(device))); return adopt(*new Ext2FS(move(device)));
} }
Ext2FileSystem::Ext2FileSystem(RetainPtr<DiskDevice>&& device) Ext2FS::Ext2FS(RetainPtr<DiskDevice>&& device)
: DiskBackedFileSystem(move(device)) : DiskBackedFS(move(device))
{ {
} }
Ext2FileSystem::~Ext2FileSystem() Ext2FS::~Ext2FS()
{ {
} }
ByteBuffer Ext2FileSystem::readSuperBlock() const ByteBuffer Ext2FS::readSuperBlock() const
{ {
auto buffer = ByteBuffer::createUninitialized(1024); auto buffer = ByteBuffer::createUninitialized(1024);
device().readBlock(2, buffer.pointer()); device().readBlock(2, buffer.pointer());
@ -58,7 +58,7 @@ ByteBuffer Ext2FileSystem::readSuperBlock() const
return buffer; return buffer;
} }
bool Ext2FileSystem::writeSuperBlock(const ext2_super_block& sb) bool Ext2FS::writeSuperBlock(const ext2_super_block& sb)
{ {
const byte* raw = (const byte*)&sb; const byte* raw = (const byte*)&sb;
bool success; bool success;
@ -71,19 +71,19 @@ bool Ext2FileSystem::writeSuperBlock(const ext2_super_block& sb)
return true; return true;
} }
unsigned Ext2FileSystem::firstBlockOfGroup(unsigned groupIndex) const unsigned Ext2FS::firstBlockOfGroup(unsigned groupIndex) const
{ {
return superBlock().s_first_data_block + (groupIndex * superBlock().s_blocks_per_group); return superBlock().s_first_data_block + (groupIndex * superBlock().s_blocks_per_group);
} }
const ext2_super_block& Ext2FileSystem::superBlock() const const ext2_super_block& Ext2FS::superBlock() const
{ {
if (!m_cachedSuperBlock) if (!m_cachedSuperBlock)
m_cachedSuperBlock = readSuperBlock(); m_cachedSuperBlock = readSuperBlock();
return *reinterpret_cast<ext2_super_block*>(m_cachedSuperBlock.pointer()); return *reinterpret_cast<ext2_super_block*>(m_cachedSuperBlock.pointer());
} }
const ext2_group_desc& Ext2FileSystem::blockGroupDescriptor(unsigned groupIndex) const const ext2_group_desc& Ext2FS::blockGroupDescriptor(unsigned groupIndex) const
{ {
// FIXME: Should this fail gracefully somehow? // FIXME: Should this fail gracefully somehow?
ASSERT(groupIndex <= m_blockGroupCount); ASSERT(groupIndex <= m_blockGroupCount);
@ -100,7 +100,7 @@ const ext2_group_desc& Ext2FileSystem::blockGroupDescriptor(unsigned groupIndex)
return reinterpret_cast<ext2_group_desc*>(m_cachedBlockGroupDescriptorTable.pointer())[groupIndex - 1]; return reinterpret_cast<ext2_group_desc*>(m_cachedBlockGroupDescriptorTable.pointer())[groupIndex - 1];
} }
bool Ext2FileSystem::initialize() bool Ext2FS::initialize()
{ {
auto& superBlock = this->superBlock(); auto& superBlock = this->superBlock();
#ifdef EXT2_DEBUG #ifdef EXT2_DEBUG
@ -146,12 +146,12 @@ bool Ext2FileSystem::initialize()
return true; return true;
} }
const char* Ext2FileSystem::class_name() const const char* Ext2FS::class_name() const
{ {
return "ext2fs"; return "ext2fs";
} }
InodeIdentifier Ext2FileSystem::rootInode() const InodeIdentifier Ext2FS::rootInode() const
{ {
return { id(), EXT2_ROOT_INO }; return { id(), EXT2_ROOT_INO };
} }
@ -168,7 +168,7 @@ static void dumpExt2Inode(const ext2_inode& inode)
} }
#endif #endif
ByteBuffer Ext2FileSystem::readBlockContainingInode(unsigned inode, unsigned& blockIndex, unsigned& offset) const ByteBuffer Ext2FS::readBlockContainingInode(unsigned inode, unsigned& blockIndex, unsigned& offset) const
{ {
auto& superBlock = this->superBlock(); auto& superBlock = this->superBlock();
@ -187,7 +187,7 @@ ByteBuffer Ext2FileSystem::readBlockContainingInode(unsigned inode, unsigned& bl
return readBlock(blockIndex); return readBlock(blockIndex);
} }
auto Ext2FileSystem::lookupExt2Inode(unsigned inode) const -> CachedExt2Inode auto Ext2FS::lookupExt2Inode(unsigned inode) const -> CachedExt2Inode
{ {
{ {
LOCKER(m_inodeCacheLock); LOCKER(m_inodeCacheLock);
@ -218,7 +218,7 @@ auto Ext2FileSystem::lookupExt2Inode(unsigned inode) const -> CachedExt2Inode
return CachedExt2Inode{ cachedInode }; return CachedExt2Inode{ cachedInode };
} }
InodeMetadata Ext2FileSystem::inodeMetadata(InodeIdentifier inode) const InodeMetadata Ext2FS::inodeMetadata(InodeIdentifier inode) const
{ {
ASSERT(inode.fsid() == id()); ASSERT(inode.fsid() == id());
@ -249,7 +249,7 @@ InodeMetadata Ext2FileSystem::inodeMetadata(InodeIdentifier inode) const
return metadata; return metadata;
} }
Vector<unsigned> Ext2FileSystem::blockListForInode(const ext2_inode& e2inode) const Vector<unsigned> Ext2FS::blockListForInode(const ext2_inode& e2inode) const
{ {
unsigned entriesPerBlock = EXT2_ADDR_PER_BLOCK(&superBlock()); unsigned entriesPerBlock = EXT2_ADDR_PER_BLOCK(&superBlock());
@ -310,17 +310,17 @@ Vector<unsigned> Ext2FileSystem::blockListForInode(const ext2_inode& e2inode) co
return list; return list;
} }
Ext2Inode::Ext2Inode(Ext2FileSystem& fs, unsigned index, const ext2_inode& raw_inode) Ext2FSInode::Ext2FSInode(Ext2FS& fs, unsigned index, const ext2_inode& raw_inode)
: CoreInode(fs, index) : CoreInode(fs, index)
, m_raw_inode(raw_inode) , m_raw_inode(raw_inode)
{ {
} }
Ext2Inode::~Ext2Inode() Ext2FSInode::~Ext2FSInode()
{ {
} }
void Ext2Inode::populate_metadata() const void Ext2FSInode::populate_metadata() const
{ {
m_metadata.inode = identifier(); m_metadata.inode = identifier();
m_metadata.size = m_raw_inode.i_size; m_metadata.size = m_raw_inode.i_size;
@ -342,7 +342,7 @@ void Ext2Inode::populate_metadata() const
} }
} }
RetainPtr<CoreInode> Ext2FileSystem::get_inode(InodeIdentifier inode) const RetainPtr<CoreInode> Ext2FS::get_inode(InodeIdentifier inode) const
{ {
ASSERT(inode.fsid() == id()); ASSERT(inode.fsid() == id());
{ {
@ -358,12 +358,12 @@ RetainPtr<CoreInode> Ext2FileSystem::get_inode(InodeIdentifier inode) const
auto it = m_inode_cache.find(inode.index()); auto it = m_inode_cache.find(inode.index());
if (it != m_inode_cache.end()) if (it != m_inode_cache.end())
return (*it).value; return (*it).value;
auto new_inode = adopt(*new Ext2Inode(const_cast<Ext2FileSystem&>(*this), inode.index(), *raw_inode)); auto new_inode = adopt(*new Ext2FSInode(const_cast<Ext2FS&>(*this), inode.index(), *raw_inode));
m_inode_cache.set(inode.index(), new_inode.copyRef()); m_inode_cache.set(inode.index(), new_inode.copyRef());
return new_inode; return new_inode;
} }
Unix::ssize_t Ext2Inode::read_bytes(Unix::off_t offset, Unix::size_t count, byte* buffer, FileDescriptor*) Unix::ssize_t Ext2FSInode::read_bytes(Unix::off_t offset, Unix::size_t count, byte* buffer, FileDescriptor*)
{ {
ASSERT(offset >= 0); ASSERT(offset >= 0);
if (m_raw_inode.i_size == 0) if (m_raw_inode.i_size == 0)
@ -425,7 +425,7 @@ Unix::ssize_t Ext2Inode::read_bytes(Unix::off_t offset, Unix::size_t count, byte
return nread; return nread;
} }
Unix::ssize_t Ext2FileSystem::read_inode_bytes(InodeIdentifier inode, Unix::off_t offset, Unix::size_t count, byte* buffer, FileDescriptor*) const Unix::ssize_t Ext2FS::read_inode_bytes(InodeIdentifier inode, Unix::off_t offset, Unix::size_t count, byte* buffer, FileDescriptor*) const
{ {
ASSERT(offset >= 0); ASSERT(offset >= 0);
ASSERT(inode.fsid() == id()); ASSERT(inode.fsid() == id());
@ -501,7 +501,7 @@ Unix::ssize_t Ext2FileSystem::read_inode_bytes(InodeIdentifier inode, Unix::off_
return nread; return nread;
} }
bool Ext2FileSystem::writeInode(InodeIdentifier inode, const ByteBuffer& data) bool Ext2FS::writeInode(InodeIdentifier inode, const ByteBuffer& data)
{ {
ASSERT(inode.fsid() == id()); ASSERT(inode.fsid() == id());
@ -536,7 +536,7 @@ bool Ext2FileSystem::writeInode(InodeIdentifier inode, const ByteBuffer& data)
return true; return true;
} }
bool Ext2Inode::traverse_as_directory(Function<bool(const FileSystem::DirectoryEntry&)> callback) bool Ext2FSInode::traverse_as_directory(Function<bool(const FS::DirectoryEntry&)> callback)
{ {
ASSERT(metadata().isDirectory()); ASSERT(metadata().isDirectory());
@ -561,7 +561,7 @@ bool Ext2Inode::traverse_as_directory(Function<bool(const FileSystem::DirectoryE
return true; return true;
} }
bool Ext2FileSystem::deprecated_enumerateDirectoryInode(InodeIdentifier inode, Function<bool(const DirectoryEntry&)> callback) const bool Ext2FS::deprecated_enumerateDirectoryInode(InodeIdentifier inode, Function<bool(const DirectoryEntry&)> callback) const
{ {
ASSERT(inode.fsid() == id()); ASSERT(inode.fsid() == id());
ASSERT(isDirectoryInode(inode.index())); ASSERT(isDirectoryInode(inode.index()));
@ -587,7 +587,7 @@ bool Ext2FileSystem::deprecated_enumerateDirectoryInode(InodeIdentifier inode, F
return true; return true;
} }
bool Ext2FileSystem::addInodeToDirectory(unsigned directoryInode, unsigned inode, const String& name, byte fileType) bool Ext2FS::addInodeToDirectory(unsigned directoryInode, unsigned inode, const String& name, byte fileType)
{ {
auto e2inodeForDirectory = lookupExt2Inode(directoryInode); auto e2inodeForDirectory = lookupExt2Inode(directoryInode);
ASSERT(e2inodeForDirectory); ASSERT(e2inodeForDirectory);
@ -616,7 +616,7 @@ bool Ext2FileSystem::addInodeToDirectory(unsigned directoryInode, unsigned inode
return writeDirectoryInode(directoryInode, move(entries)); return writeDirectoryInode(directoryInode, move(entries));
} }
bool Ext2FileSystem::writeDirectoryInode(unsigned directoryInode, Vector<DirectoryEntry>&& entries) bool Ext2FS::writeDirectoryInode(unsigned directoryInode, Vector<DirectoryEntry>&& entries)
{ {
kprintf("ext2fs: New directory inode %u contents to write:\n", directoryInode); kprintf("ext2fs: New directory inode %u contents to write:\n", directoryInode);
@ -679,27 +679,27 @@ bool Ext2FileSystem::writeDirectoryInode(unsigned directoryInode, Vector<Directo
return true; return true;
} }
unsigned Ext2FileSystem::inodesPerBlock() const unsigned Ext2FS::inodesPerBlock() const
{ {
return EXT2_INODES_PER_BLOCK(&superBlock()); return EXT2_INODES_PER_BLOCK(&superBlock());
} }
unsigned Ext2FileSystem::inodesPerGroup() const unsigned Ext2FS::inodesPerGroup() const
{ {
return EXT2_INODES_PER_GROUP(&superBlock()); return EXT2_INODES_PER_GROUP(&superBlock());
} }
unsigned Ext2FileSystem::inodeSize() const unsigned Ext2FS::inodeSize() const
{ {
return EXT2_INODE_SIZE(&superBlock()); return EXT2_INODE_SIZE(&superBlock());
} }
unsigned Ext2FileSystem::blocksPerGroup() const unsigned Ext2FS::blocksPerGroup() const
{ {
return EXT2_BLOCKS_PER_GROUP(&superBlock()); return EXT2_BLOCKS_PER_GROUP(&superBlock());
} }
void Ext2FileSystem::dumpBlockBitmap(unsigned groupIndex) const void Ext2FS::dumpBlockBitmap(unsigned groupIndex) const
{ {
ASSERT(groupIndex <= m_blockGroupCount); ASSERT(groupIndex <= m_blockGroupCount);
auto& bgd = blockGroupDescriptor(groupIndex); auto& bgd = blockGroupDescriptor(groupIndex);
@ -719,7 +719,7 @@ void Ext2FileSystem::dumpBlockBitmap(unsigned groupIndex) const
kprintf("\n"); kprintf("\n");
} }
void Ext2FileSystem::dumpInodeBitmap(unsigned groupIndex) const void Ext2FS::dumpInodeBitmap(unsigned groupIndex) const
{ {
traverseInodeBitmap(groupIndex, [] (unsigned, const Bitmap& bitmap) { traverseInodeBitmap(groupIndex, [] (unsigned, const Bitmap& bitmap) {
for (unsigned i = 0; i < bitmap.size(); ++i) for (unsigned i = 0; i < bitmap.size(); ++i)
@ -729,7 +729,7 @@ void Ext2FileSystem::dumpInodeBitmap(unsigned groupIndex) const
} }
template<typename F> template<typename F>
void Ext2FileSystem::traverseInodeBitmap(unsigned groupIndex, F callback) const void Ext2FS::traverseInodeBitmap(unsigned groupIndex, F callback) const
{ {
ASSERT(groupIndex <= m_blockGroupCount); ASSERT(groupIndex <= m_blockGroupCount);
auto& bgd = blockGroupDescriptor(groupIndex); auto& bgd = blockGroupDescriptor(groupIndex);
@ -747,7 +747,7 @@ void Ext2FileSystem::traverseInodeBitmap(unsigned groupIndex, F callback) const
} }
template<typename F> template<typename F>
void Ext2FileSystem::traverseBlockBitmap(unsigned groupIndex, F callback) const void Ext2FS::traverseBlockBitmap(unsigned groupIndex, F callback) const
{ {
ASSERT(groupIndex <= m_blockGroupCount); ASSERT(groupIndex <= m_blockGroupCount);
auto& bgd = blockGroupDescriptor(groupIndex); auto& bgd = blockGroupDescriptor(groupIndex);
@ -764,7 +764,7 @@ void Ext2FileSystem::traverseBlockBitmap(unsigned groupIndex, F callback) const
} }
} }
bool Ext2FileSystem::modifyLinkCount(InodeIndex inode, int delta) bool Ext2FS::modifyLinkCount(InodeIndex inode, int delta)
{ {
ASSERT(inode); ASSERT(inode);
auto e2inode = lookupExt2Inode(inode); auto e2inode = lookupExt2Inode(inode);
@ -778,7 +778,7 @@ bool Ext2FileSystem::modifyLinkCount(InodeIndex inode, int delta)
return writeExt2Inode(inode, *e2inode); return writeExt2Inode(inode, *e2inode);
} }
bool Ext2FileSystem::set_mtime(InodeIdentifier inode, dword timestamp) bool Ext2FS::set_mtime(InodeIdentifier inode, dword timestamp)
{ {
ASSERT(inode.fsid() == id()); ASSERT(inode.fsid() == id());
@ -792,7 +792,7 @@ bool Ext2FileSystem::set_mtime(InodeIdentifier inode, dword timestamp)
return writeExt2Inode(inode.index(), *e2inode); return writeExt2Inode(inode.index(), *e2inode);
} }
bool Ext2FileSystem::writeExt2Inode(unsigned inode, const ext2_inode& e2inode) bool Ext2FS::writeExt2Inode(unsigned inode, const ext2_inode& e2inode)
{ {
unsigned blockIndex; unsigned blockIndex;
unsigned offset; unsigned offset;
@ -804,14 +804,14 @@ bool Ext2FileSystem::writeExt2Inode(unsigned inode, const ext2_inode& e2inode)
return true; return true;
} }
bool Ext2FileSystem::isDirectoryInode(unsigned inode) const bool Ext2FS::isDirectoryInode(unsigned inode) const
{ {
if (auto e2inode = lookupExt2Inode(inode)) if (auto e2inode = lookupExt2Inode(inode))
return isDirectory(e2inode->i_mode); return isDirectory(e2inode->i_mode);
return false; return false;
} }
Vector<Ext2FileSystem::BlockIndex> Ext2FileSystem::allocateBlocks(unsigned group, unsigned count) Vector<Ext2FS::BlockIndex> Ext2FS::allocateBlocks(unsigned group, unsigned count)
{ {
kprintf("ext2fs: allocateBlocks(group: %u, count: %u)\n", group, count); kprintf("ext2fs: allocateBlocks(group: %u, count: %u)\n", group, count);
@ -841,7 +841,7 @@ Vector<Ext2FileSystem::BlockIndex> Ext2FileSystem::allocateBlocks(unsigned group
return blocks; return blocks;
} }
unsigned Ext2FileSystem::allocateInode(unsigned preferredGroup, unsigned expectedSize) unsigned Ext2FS::allocateInode(unsigned preferredGroup, unsigned expectedSize)
{ {
kprintf("ext2fs: allocateInode(preferredGroup: %u, expectedSize: %u)\n", preferredGroup, expectedSize); kprintf("ext2fs: allocateInode(preferredGroup: %u, expectedSize: %u)\n", preferredGroup, expectedSize);
@ -896,14 +896,14 @@ unsigned Ext2FileSystem::allocateInode(unsigned preferredGroup, unsigned expecte
return inode; return inode;
} }
unsigned Ext2FileSystem::groupIndexFromInode(unsigned inode) const unsigned Ext2FS::groupIndexFromInode(unsigned inode) const
{ {
if (!inode) if (!inode)
return 0; return 0;
return (inode - 1) / inodesPerGroup() + 1; return (inode - 1) / inodesPerGroup() + 1;
} }
bool Ext2FileSystem::setInodeAllocationState(unsigned inode, bool newState) bool Ext2FS::setInodeAllocationState(unsigned inode, bool newState)
{ {
auto& bgd = blockGroupDescriptor(groupIndexFromInode(inode)); auto& bgd = blockGroupDescriptor(groupIndexFromInode(inode));
@ -947,7 +947,7 @@ bool Ext2FileSystem::setInodeAllocationState(unsigned inode, bool newState)
return true; return true;
} }
bool Ext2FileSystem::setBlockAllocationState(GroupIndex group, BlockIndex bi, bool newState) bool Ext2FS::setBlockAllocationState(GroupIndex group, BlockIndex bi, bool newState)
{ {
auto& bgd = blockGroupDescriptor(group); auto& bgd = blockGroupDescriptor(group);
@ -991,7 +991,7 @@ bool Ext2FileSystem::setBlockAllocationState(GroupIndex group, BlockIndex bi, bo
return true; return true;
} }
InodeIdentifier Ext2FileSystem::create_directory(InodeIdentifier parentInode, const String& name, Unix::mode_t mode) InodeIdentifier Ext2FS::create_directory(InodeIdentifier parentInode, const String& name, Unix::mode_t mode)
{ {
ASSERT(parentInode.fsid() == id()); ASSERT(parentInode.fsid() == id());
ASSERT(isDirectoryInode(parentInode.index())); ASSERT(isDirectoryInode(parentInode.index()));
@ -1030,7 +1030,7 @@ InodeIdentifier Ext2FileSystem::create_directory(InodeIdentifier parentInode, co
return inode; return inode;
} }
InodeIdentifier Ext2FileSystem::create_inode(InodeIdentifier parentInode, const String& name, Unix::mode_t mode, unsigned size) InodeIdentifier Ext2FS::create_inode(InodeIdentifier parentInode, const String& name, Unix::mode_t mode, unsigned size)
{ {
ASSERT(parentInode.fsid() == id()); ASSERT(parentInode.fsid() == id());
ASSERT(isDirectoryInode(parentInode.index())); ASSERT(isDirectoryInode(parentInode.index()));
@ -1119,7 +1119,7 @@ InodeIdentifier Ext2FileSystem::create_inode(InodeIdentifier parentInode, const
return { id(), inode }; return { id(), inode };
} }
InodeIdentifier Ext2FileSystem::find_parent_of_inode(InodeIdentifier inode_id) const InodeIdentifier Ext2FS::find_parent_of_inode(InodeIdentifier inode_id) const
{ {
auto inode = get_inode(inode_id); auto inode = get_inode(inode_id);
ASSERT(inode); ASSERT(inode);
@ -1127,7 +1127,7 @@ InodeIdentifier Ext2FileSystem::find_parent_of_inode(InodeIdentifier inode_id) c
unsigned groupIndex = groupIndexFromInode(inode->index()); unsigned groupIndex = groupIndexFromInode(inode->index());
unsigned firstInodeInGroup = inodesPerGroup() * (groupIndex - 1); unsigned firstInodeInGroup = inodesPerGroup() * (groupIndex - 1);
Vector<RetainPtr<Ext2Inode>> directories_in_group; Vector<RetainPtr<Ext2FSInode>> directories_in_group;
for (unsigned i = 0; i < inodesPerGroup(); ++i) { for (unsigned i = 0; i < inodesPerGroup(); ++i) {
auto group_member = get_inode({ id(), firstInodeInGroup + i }); auto group_member = get_inode({ id(), firstInodeInGroup + i });
@ -1148,7 +1148,7 @@ InodeIdentifier Ext2FileSystem::find_parent_of_inode(InodeIdentifier inode_id) c
return foundParent; return foundParent;
} }
void Ext2Inode::populate_lookup_cache() void Ext2FSInode::populate_lookup_cache()
{ {
{ {
LOCKER(m_lock); LOCKER(m_lock);
@ -1168,7 +1168,7 @@ void Ext2Inode::populate_lookup_cache()
m_lookup_cache = move(children); m_lookup_cache = move(children);
} }
InodeIdentifier Ext2Inode::lookup(const String& name) InodeIdentifier Ext2FSInode::lookup(const String& name)
{ {
ASSERT(is_directory()); ASSERT(is_directory());
populate_lookup_cache(); populate_lookup_cache();
@ -1179,7 +1179,7 @@ InodeIdentifier Ext2Inode::lookup(const String& name)
return { }; return { };
} }
String Ext2Inode::reverse_lookup(InodeIdentifier child_id) String Ext2FSInode::reverse_lookup(InodeIdentifier child_id)
{ {
ASSERT(is_directory()); ASSERT(is_directory());
ASSERT(child_id.fsid() == fsid()); ASSERT(child_id.fsid() == fsid());

View file

@ -10,12 +10,12 @@ struct ext2_group_desc;
struct ext2_inode; struct ext2_inode;
struct ext2_super_block; struct ext2_super_block;
class Ext2FileSystem; class Ext2FS;
class Ext2Inode final : public CoreInode { class Ext2FSInode final : public CoreInode {
friend class Ext2FileSystem; friend class Ext2FS;
public: public:
virtual ~Ext2Inode() override; virtual ~Ext2FSInode() override;
size_t size() const { return m_raw_inode.i_size; } size_t size() const { return m_raw_inode.i_size; }
bool is_symlink() const { return isSymbolicLink(m_raw_inode.i_mode); } bool is_symlink() const { return isSymbolicLink(m_raw_inode.i_mode); }
@ -24,15 +24,15 @@ private:
// ^CoreInode // ^CoreInode
virtual Unix::ssize_t read_bytes(Unix::off_t, Unix::size_t, byte* buffer, FileDescriptor*) override; virtual Unix::ssize_t read_bytes(Unix::off_t, Unix::size_t, byte* buffer, FileDescriptor*) override;
virtual void populate_metadata() const override; virtual void populate_metadata() const override;
virtual bool traverse_as_directory(Function<bool(const FileSystem::DirectoryEntry&)>) override; virtual bool traverse_as_directory(Function<bool(const FS::DirectoryEntry&)>) override;
virtual InodeIdentifier lookup(const String& name) override; virtual InodeIdentifier lookup(const String& name) override;
virtual String reverse_lookup(InodeIdentifier) override; virtual String reverse_lookup(InodeIdentifier) override;
void populate_lookup_cache(); void populate_lookup_cache();
Ext2FileSystem& fs(); Ext2FS& fs();
const Ext2FileSystem& fs() const; const Ext2FS& fs() const;
Ext2Inode(Ext2FileSystem&, unsigned index, const ext2_inode&); Ext2FSInode(Ext2FS&, unsigned index, const ext2_inode&);
SpinLock m_lock; SpinLock m_lock;
Vector<unsigned> m_block_list; Vector<unsigned> m_block_list;
@ -40,11 +40,11 @@ private:
ext2_inode m_raw_inode; ext2_inode m_raw_inode;
}; };
class Ext2FileSystem final : public DiskBackedFileSystem { class Ext2FS final : public DiskBackedFS {
friend class Ext2Inode; friend class Ext2FSInode;
public: public:
static RetainPtr<Ext2FileSystem> create(RetainPtr<DiskDevice>&&); static RetainPtr<Ext2FS> create(RetainPtr<DiskDevice>&&);
virtual ~Ext2FileSystem() override; virtual ~Ext2FS() override;
virtual bool initialize() override; virtual bool initialize() override;
private: private:
@ -54,7 +54,7 @@ private:
class CachedExt2Inode; class CachedExt2Inode;
class CachedExt2InodeImpl; class CachedExt2InodeImpl;
explicit Ext2FileSystem(RetainPtr<DiskDevice>&&); explicit Ext2FS(RetainPtr<DiskDevice>&&);
const ext2_super_block& superBlock() const; const ext2_super_block& superBlock() const;
const ext2_group_desc& blockGroupDescriptor(unsigned groupIndex) const; const ext2_group_desc& blockGroupDescriptor(unsigned groupIndex) const;
@ -113,15 +113,15 @@ private:
mutable HashMap<unsigned, RetainPtr<CachedExt2InodeImpl>> m_inodeCache; mutable HashMap<unsigned, RetainPtr<CachedExt2InodeImpl>> m_inodeCache;
mutable SpinLock m_inode_cache_lock; mutable SpinLock m_inode_cache_lock;
mutable HashMap<BlockIndex, RetainPtr<Ext2Inode>> m_inode_cache; mutable HashMap<BlockIndex, RetainPtr<Ext2FSInode>> m_inode_cache;
}; };
inline Ext2FileSystem& Ext2Inode::fs() inline Ext2FS& Ext2FSInode::fs()
{ {
return static_cast<Ext2FileSystem&>(CoreInode::fs()); return static_cast<Ext2FS&>(CoreInode::fs());
} }
inline const Ext2FileSystem& Ext2Inode::fs() const inline const Ext2FS& Ext2FSInode::fs() const
{ {
return static_cast<const Ext2FileSystem&>(CoreInode::fs()); return static_cast<const Ext2FS&>(CoreInode::fs());
} }

View file

@ -3,33 +3,33 @@
#include "FileSystem.h" #include "FileSystem.h"
static dword s_lastFileSystemID; static dword s_lastFileSystemID;
static HashMap<dword, FileSystem*>* map; static HashMap<dword, FS*>* map;
static HashMap<dword, FileSystem*>& fileSystems() static HashMap<dword, FS*>& fileSystems()
{ {
if (!map) if (!map)
map = new HashMap<dword, FileSystem*>(); map = new HashMap<dword, FS*>();
return *map; return *map;
} }
void FileSystem::initializeGlobals() void FS::initializeGlobals()
{ {
s_lastFileSystemID = 0; s_lastFileSystemID = 0;
map = 0; map = 0;
} }
FileSystem::FileSystem() FS::FS()
: m_id(++s_lastFileSystemID) : m_id(++s_lastFileSystemID)
{ {
fileSystems().set(m_id, this); fileSystems().set(m_id, this);
} }
FileSystem::~FileSystem() FS::~FS()
{ {
fileSystems().remove(m_id); fileSystems().remove(m_id);
} }
FileSystem* FileSystem::fromID(dword id) FS* FS::fromID(dword id)
{ {
auto it = fileSystems().find(id); auto it = fileSystems().find(id);
if (it != fileSystems().end()) if (it != fileSystems().end())
@ -69,7 +69,7 @@ ByteBuffer CoreInode::read_entire(FileDescriptor* descriptor)
*/ */
} }
ByteBuffer FileSystem::readEntireInode(InodeIdentifier inode, FileDescriptor* handle) const ByteBuffer FS::readEntireInode(InodeIdentifier inode, FileDescriptor* handle) const
{ {
ASSERT(inode.fsid() == id()); ASSERT(inode.fsid() == id());
@ -106,7 +106,7 @@ ByteBuffer FileSystem::readEntireInode(InodeIdentifier inode, FileDescriptor* ha
return contents; return contents;
} }
FileSystem::DirectoryEntry::DirectoryEntry(const char* n, InodeIdentifier i, byte ft) FS::DirectoryEntry::DirectoryEntry(const char* n, InodeIdentifier i, byte ft)
: name_length(strlen(name)) : name_length(strlen(name))
, inode(i) , inode(i)
, fileType(ft) , fileType(ft)
@ -115,7 +115,7 @@ FileSystem::DirectoryEntry::DirectoryEntry(const char* n, InodeIdentifier i, byt
name[name_length] = '\0'; name[name_length] = '\0';
} }
FileSystem::DirectoryEntry::DirectoryEntry(const char* n, Unix::size_t nl, InodeIdentifier i, byte ft) FS::DirectoryEntry::DirectoryEntry(const char* n, Unix::size_t nl, InodeIdentifier i, byte ft)
: name_length(nl) : name_length(nl)
, inode(i) , inode(i)
, fileType(ft) , fileType(ft)

View file

@ -19,13 +19,13 @@ static const dword mepoch = 476763780;
class CoreInode; class CoreInode;
class FileDescriptor; class FileDescriptor;
class FileSystem : public Retainable<FileSystem> { class FS : public Retainable<FS> {
public: public:
static void initializeGlobals(); static void initializeGlobals();
virtual ~FileSystem(); virtual ~FS();
dword id() const { return m_id; } dword id() const { return m_id; }
static FileSystem* fromID(dword); static FS* fromID(dword);
virtual bool initialize() = 0; virtual bool initialize() = 0;
virtual const char* class_name() const = 0; virtual const char* class_name() const = 0;
@ -55,7 +55,7 @@ public:
ByteBuffer readEntireInode(InodeIdentifier, FileDescriptor* = nullptr) const; ByteBuffer readEntireInode(InodeIdentifier, FileDescriptor* = nullptr) const;
protected: protected:
FileSystem(); FS();
private: private:
dword m_id { 0 }; dword m_id { 0 };
@ -66,8 +66,8 @@ class CoreInode : public Retainable<CoreInode> {
public: public:
virtual ~CoreInode(); virtual ~CoreInode();
FileSystem& fs() { return m_fs; } FS& fs() { return m_fs; }
const FileSystem& fs() const { return m_fs; } const FS& fs() const { return m_fs; }
unsigned fsid() const; unsigned fsid() const;
unsigned index() const { return m_index; } unsigned index() const { return m_index; }
@ -81,12 +81,12 @@ public:
ByteBuffer read_entire(FileDescriptor* = nullptr); ByteBuffer read_entire(FileDescriptor* = nullptr);
virtual Unix::ssize_t read_bytes(Unix::off_t, Unix::size_t, byte* buffer, FileDescriptor*) = 0; virtual Unix::ssize_t read_bytes(Unix::off_t, Unix::size_t, byte* buffer, FileDescriptor*) = 0;
virtual bool traverse_as_directory(Function<bool(const FileSystem::DirectoryEntry&)>) = 0; virtual bool traverse_as_directory(Function<bool(const FS::DirectoryEntry&)>) = 0;
virtual InodeIdentifier lookup(const String& name) = 0; virtual InodeIdentifier lookup(const String& name) = 0;
virtual String reverse_lookup(InodeIdentifier) = 0; virtual String reverse_lookup(InodeIdentifier) = 0;
protected: protected:
CoreInode(FileSystem& fs, unsigned index) CoreInode(FS& fs, unsigned index)
: m_fs(fs) : m_fs(fs)
, m_index(index) , m_index(index)
{ {
@ -96,18 +96,18 @@ protected:
mutable InodeMetadata m_metadata; mutable InodeMetadata m_metadata;
private: private:
FileSystem& m_fs; FS& m_fs;
unsigned m_index { 0 }; unsigned m_index { 0 };
}; };
inline FileSystem* InodeIdentifier::fileSystem() inline FS* InodeIdentifier::fileSystem()
{ {
return FileSystem::fromID(m_fileSystemID); return FS::fromID(m_fileSystemID);
} }
inline const FileSystem* InodeIdentifier::fileSystem() const inline const FS* InodeIdentifier::fileSystem() const
{ {
return FileSystem::fromID(m_fileSystemID); return FS::fromID(m_fileSystemID);
} }
inline InodeMetadata InodeIdentifier::metadata() const inline InodeMetadata InodeIdentifier::metadata() const

View file

@ -3,7 +3,7 @@
#include <AK/ByteBuffer.h> #include <AK/ByteBuffer.h>
#include <AK/Types.h> #include <AK/Types.h>
class FileSystem; class FS;
struct InodeMetadata; struct InodeMetadata;
class InodeIdentifier { class InodeIdentifier {
@ -20,8 +20,8 @@ public:
dword fsid() const { return m_fileSystemID; } dword fsid() const { return m_fileSystemID; }
dword index() const { return m_index; } dword index() const { return m_index; }
FileSystem* fileSystem(); FS* fileSystem();
const FileSystem* fileSystem() const; const FS* fileSystem() const;
bool operator==(const InodeIdentifier& other) const bool operator==(const InodeIdentifier& other) const
{ {

View file

@ -9,20 +9,20 @@ typedef int InterruptDisabler;
//#define SYNTHFS_DEBUG //#define SYNTHFS_DEBUG
RetainPtr<SyntheticFileSystem> SyntheticFileSystem::create() RetainPtr<SynthFS> SynthFS::create()
{ {
return adopt(*new SyntheticFileSystem); return adopt(*new SynthFS);
} }
SyntheticFileSystem::SyntheticFileSystem() SynthFS::SynthFS()
{ {
} }
SyntheticFileSystem::~SyntheticFileSystem() SynthFS::~SynthFS()
{ {
} }
bool SyntheticFileSystem::initialize() bool SynthFS::initialize()
{ {
// Add a File for the root directory. // Add a File for the root directory.
// FIXME: This needs work. // FIXME: This needs work.
@ -43,7 +43,7 @@ bool SyntheticFileSystem::initialize()
return true; return true;
} }
RetainPtr<SynthFSInode> SyntheticFileSystem::create_directory(String&& name) RetainPtr<SynthFSInode> SynthFS::create_directory(String&& name)
{ {
auto file = adopt(*new SynthFSInode(*this, generateInodeIndex())); auto file = adopt(*new SynthFSInode(*this, generateInodeIndex()));
file->m_name = move(name); file->m_name = move(name);
@ -55,7 +55,7 @@ RetainPtr<SynthFSInode> SyntheticFileSystem::create_directory(String&& name)
return file; return file;
} }
RetainPtr<SynthFSInode> SyntheticFileSystem::create_text_file(String&& name, ByteBuffer&& contents, Unix::mode_t mode) RetainPtr<SynthFSInode> SynthFS::create_text_file(String&& name, ByteBuffer&& contents, Unix::mode_t mode)
{ {
auto file = adopt(*new SynthFSInode(*this, generateInodeIndex())); auto file = adopt(*new SynthFSInode(*this, generateInodeIndex()));
file->m_data = contents; file->m_data = contents;
@ -68,7 +68,7 @@ RetainPtr<SynthFSInode> SyntheticFileSystem::create_text_file(String&& name, Byt
return file; return file;
} }
RetainPtr<SynthFSInode> SyntheticFileSystem::create_generated_file(String&& name, Function<ByteBuffer()>&& generator, Unix::mode_t mode) RetainPtr<SynthFSInode> SynthFS::create_generated_file(String&& name, Function<ByteBuffer()>&& generator, Unix::mode_t mode)
{ {
auto file = adopt(*new SynthFSInode(*this, generateInodeIndex())); auto file = adopt(*new SynthFSInode(*this, generateInodeIndex()));
file->m_generator = move(generator); file->m_generator = move(generator);
@ -81,7 +81,7 @@ RetainPtr<SynthFSInode> SyntheticFileSystem::create_generated_file(String&& name
return file; return file;
} }
InodeIdentifier SyntheticFileSystem::addFile(RetainPtr<SynthFSInode>&& file, InodeIndex parent) InodeIdentifier SynthFS::addFile(RetainPtr<SynthFSInode>&& file, InodeIndex parent)
{ {
ASSERT_INTERRUPTS_DISABLED(); ASSERT_INTERRUPTS_DISABLED();
ASSERT(file); ASSERT(file);
@ -95,7 +95,7 @@ InodeIdentifier SyntheticFileSystem::addFile(RetainPtr<SynthFSInode>&& file, Ino
return new_inode_id; return new_inode_id;
} }
bool SyntheticFileSystem::removeFile(InodeIndex inode) bool SynthFS::removeFile(InodeIndex inode)
{ {
ASSERT_INTERRUPTS_DISABLED(); ASSERT_INTERRUPTS_DISABLED();
auto it = m_inodes.find(inode); auto it = m_inodes.find(inode);
@ -121,17 +121,17 @@ bool SyntheticFileSystem::removeFile(InodeIndex inode)
return true; return true;
} }
const char* SyntheticFileSystem::class_name() const const char* SynthFS::class_name() const
{ {
return "synthfs"; return "synthfs";
} }
InodeIdentifier SyntheticFileSystem::rootInode() const InodeIdentifier SynthFS::rootInode() const
{ {
return { id(), 1 }; return { id(), 1 };
} }
InodeMetadata SyntheticFileSystem::inodeMetadata(InodeIdentifier inode) const InodeMetadata SynthFS::inodeMetadata(InodeIdentifier inode) const
{ {
InterruptDisabler disabler; InterruptDisabler disabler;
ASSERT(inode.fsid() == id()); ASSERT(inode.fsid() == id());
@ -145,14 +145,14 @@ InodeMetadata SyntheticFileSystem::inodeMetadata(InodeIdentifier inode) const
return (*it).value->m_metadata; return (*it).value->m_metadata;
} }
bool SyntheticFileSystem::set_mtime(InodeIdentifier, dword timestamp) bool SynthFS::set_mtime(InodeIdentifier, dword timestamp)
{ {
(void) timestamp; (void) timestamp;
kprintf("FIXME: Implement SyntheticFileSystem::setModificationTime().\n"); kprintf("FIXME: Implement SyntheticFileSystem::setModificationTime().\n");
return false; return false;
} }
InodeIdentifier SyntheticFileSystem::create_inode(InodeIdentifier parentInode, const String& name, Unix::mode_t mode, unsigned size) InodeIdentifier SynthFS::create_inode(InodeIdentifier parentInode, const String& name, Unix::mode_t mode, unsigned size)
{ {
(void) parentInode; (void) parentInode;
(void) name; (void) name;
@ -162,13 +162,13 @@ InodeIdentifier SyntheticFileSystem::create_inode(InodeIdentifier parentInode, c
return { }; return { };
} }
bool SyntheticFileSystem::writeInode(InodeIdentifier, const ByteBuffer&) bool SynthFS::writeInode(InodeIdentifier, const ByteBuffer&)
{ {
kprintf("FIXME: Implement SyntheticFileSystem::writeInode().\n"); kprintf("FIXME: Implement SyntheticFileSystem::writeInode().\n");
return false; return false;
} }
Unix::ssize_t SyntheticFileSystem::read_inode_bytes(InodeIdentifier inode, Unix::off_t offset, Unix::size_t count, byte* buffer, FileDescriptor* handle) const Unix::ssize_t SynthFS::read_inode_bytes(InodeIdentifier inode, Unix::off_t offset, Unix::size_t count, byte* buffer, FileDescriptor* handle) const
{ {
ASSERT(inode.fsid() == id()); ASSERT(inode.fsid() == id());
#ifdef SYNTHFS_DEBUG #ifdef SYNTHFS_DEBUG
@ -205,7 +205,7 @@ Unix::ssize_t SyntheticFileSystem::read_inode_bytes(InodeIdentifier inode, Unix:
return nread; return nread;
} }
InodeIdentifier SyntheticFileSystem::create_directory(InodeIdentifier parentInode, const String& name, Unix::mode_t) InodeIdentifier SynthFS::create_directory(InodeIdentifier parentInode, const String& name, Unix::mode_t)
{ {
(void) parentInode; (void) parentInode;
(void) name; (void) name;
@ -213,12 +213,12 @@ InodeIdentifier SyntheticFileSystem::create_directory(InodeIdentifier parentInod
return { }; return { };
} }
auto SyntheticFileSystem::generateInodeIndex() -> InodeIndex auto SynthFS::generateInodeIndex() -> InodeIndex
{ {
return m_nextInodeIndex++; return m_nextInodeIndex++;
} }
InodeIdentifier SyntheticFileSystem::find_parent_of_inode(InodeIdentifier inode) const InodeIdentifier SynthFS::find_parent_of_inode(InodeIdentifier inode) const
{ {
auto it = m_inodes.find(inode.index()); auto it = m_inodes.find(inode.index());
if (it == m_inodes.end()) if (it == m_inodes.end())
@ -226,7 +226,7 @@ InodeIdentifier SyntheticFileSystem::find_parent_of_inode(InodeIdentifier inode)
return (*it).value->m_parent; return (*it).value->m_parent;
} }
RetainPtr<CoreInode> SyntheticFileSystem::get_inode(InodeIdentifier inode) const RetainPtr<CoreInode> SynthFS::get_inode(InodeIdentifier inode) const
{ {
auto it = m_inodes.find(inode.index()); auto it = m_inodes.find(inode.index());
if (it == m_inodes.end()) if (it == m_inodes.end())
@ -234,7 +234,7 @@ RetainPtr<CoreInode> SyntheticFileSystem::get_inode(InodeIdentifier inode) const
return (*it).value; return (*it).value;
} }
SynthFSInode::SynthFSInode(SyntheticFileSystem& fs, unsigned index) SynthFSInode::SynthFSInode(SynthFS& fs, unsigned index)
: CoreInode(fs, index) : CoreInode(fs, index)
{ {
m_metadata.inode = { fs.id(), index }; m_metadata.inode = { fs.id(), index };
@ -276,7 +276,7 @@ Unix::ssize_t SynthFSInode::read_bytes(Unix::off_t offset, Unix::size_t count, b
return nread; return nread;
} }
bool SynthFSInode::traverse_as_directory(Function<bool(const FileSystem::DirectoryEntry&)> callback) bool SynthFSInode::traverse_as_directory(Function<bool(const FS::DirectoryEntry&)> callback)
{ {
InterruptDisabler disabler; InterruptDisabler disabler;
#ifdef SYNTHFS_DEBUG #ifdef SYNTHFS_DEBUG

View file

@ -6,10 +6,10 @@
class SynthFSInode; class SynthFSInode;
class SyntheticFileSystem : public FileSystem { class SynthFS : public FS {
public: public:
virtual ~SyntheticFileSystem() override; virtual ~SynthFS() override;
static RetainPtr<SyntheticFileSystem> create(); static RetainPtr<SynthFS> create();
virtual bool initialize() override; virtual bool initialize() override;
virtual const char* class_name() const override; virtual const char* class_name() const override;
@ -29,7 +29,7 @@ protected:
InodeIndex generateInodeIndex(); InodeIndex generateInodeIndex();
static constexpr InodeIndex RootInodeIndex = 1; static constexpr InodeIndex RootInodeIndex = 1;
SyntheticFileSystem(); SynthFS();
RetainPtr<SynthFSInode> create_directory(String&& name); RetainPtr<SynthFSInode> create_directory(String&& name);
RetainPtr<SynthFSInode> create_text_file(String&& name, ByteBuffer&&, Unix::mode_t = 0010644); RetainPtr<SynthFSInode> create_text_file(String&& name, ByteBuffer&&, Unix::mode_t = 0010644);
@ -44,7 +44,7 @@ private:
}; };
class SynthFSInode final : public CoreInode { class SynthFSInode final : public CoreInode {
friend class SyntheticFileSystem; friend class SynthFS;
public: public:
virtual ~SynthFSInode() override; virtual ~SynthFSInode() override;
@ -52,13 +52,13 @@ private:
// ^CoreInode // ^CoreInode
virtual Unix::ssize_t read_bytes(Unix::off_t, Unix::size_t, byte* buffer, FileDescriptor*) override; virtual Unix::ssize_t read_bytes(Unix::off_t, Unix::size_t, byte* buffer, FileDescriptor*) override;
virtual void populate_metadata() const override; virtual void populate_metadata() const override;
virtual bool traverse_as_directory(Function<bool(const FileSystem::DirectoryEntry&)>) override; virtual bool traverse_as_directory(Function<bool(const FS::DirectoryEntry&)>) override;
virtual InodeIdentifier lookup(const String& name) override; virtual InodeIdentifier lookup(const String& name) override;
virtual String reverse_lookup(InodeIdentifier) override; virtual String reverse_lookup(InodeIdentifier) override;
SyntheticFileSystem& fs(); SynthFS& fs();
const SyntheticFileSystem& fs() const; const SynthFS& fs() const;
SynthFSInode(SyntheticFileSystem&, unsigned index); SynthFSInode(SynthFS&, unsigned index);
String m_name; String m_name;
InodeIdentifier m_parent; InodeIdentifier m_parent;

View file

@ -25,7 +25,7 @@ VFS& VFS::the()
void VFS::initialize_globals() void VFS::initialize_globals()
{ {
s_the = nullptr; s_the = nullptr;
FileSystem::initializeGlobals(); FS::initializeGlobals();
} }
VFS::VFS() VFS::VFS()
@ -74,7 +74,7 @@ auto VFS::makeNode(InodeIdentifier inode) -> RetainPtr<Vnode>
auto vnode = allocateNode(); auto vnode = allocateNode();
ASSERT(vnode); ASSERT(vnode);
FileSystem* fileSystem = inode.fileSystem(); FS* fileSystem = inode.fileSystem();
fileSystem->retain(); fileSystem->retain();
vnode->inode = inode; vnode->inode = inode;
@ -129,7 +129,7 @@ auto VFS::get_or_create_node(CharacterDevice& device) -> RetainPtr<Vnode>
return makeNode(device); return makeNode(device);
} }
bool VFS::mount(RetainPtr<FileSystem>&& fileSystem, const String& path) bool VFS::mount(RetainPtr<FS>&& fileSystem, const String& path)
{ {
ASSERT(fileSystem); ASSERT(fileSystem);
int error; int error;
@ -146,7 +146,7 @@ bool VFS::mount(RetainPtr<FileSystem>&& fileSystem, const String& path)
return true; return true;
} }
bool VFS::mount_root(RetainPtr<FileSystem>&& fileSystem) bool VFS::mount_root(RetainPtr<FS>&& fileSystem)
{ {
if (m_root_vnode) { if (m_root_vnode) {
kprintf("VFS: mount_root can't mount another root\n"); kprintf("VFS: mount_root can't mount another root\n");
@ -243,9 +243,9 @@ bool VFS::is_vfs_root(InodeIdentifier inode) const
return inode == m_root_vnode->inode; return inode == m_root_vnode->inode;
} }
void VFS::traverse_directory_inode(CoreInode& dir_inode, Function<bool(const FileSystem::DirectoryEntry&)> callback) void VFS::traverse_directory_inode(CoreInode& dir_inode, Function<bool(const FS::DirectoryEntry&)> callback)
{ {
dir_inode.traverse_as_directory([&] (const FileSystem::DirectoryEntry& entry) { dir_inode.traverse_as_directory([&] (const FS::DirectoryEntry& entry) {
InodeIdentifier resolvedInode; InodeIdentifier resolvedInode;
if (auto mount = find_mount_for_host(entry.inode)) if (auto mount = find_mount_for_host(entry.inode))
resolvedInode = mount->guest(); resolvedInode = mount->guest();
@ -257,7 +257,7 @@ void VFS::traverse_directory_inode(CoreInode& dir_inode, Function<bool(const Fil
ASSERT(mount); ASSERT(mount);
resolvedInode = mount->host(); resolvedInode = mount->host();
} }
callback(FileSystem::DirectoryEntry(entry.name, entry.name_length, resolvedInode, entry.fileType)); callback(FS::DirectoryEntry(entry.name, entry.name_length, resolvedInode, entry.fileType));
return true; return true;
}); });
} }
@ -597,7 +597,7 @@ const InodeMetadata& Vnode::metadata() const
return m_cachedMetadata; return m_cachedMetadata;
} }
VFS::Mount::Mount(InodeIdentifier host, RetainPtr<FileSystem>&& guest_fs) VFS::Mount::Mount(InodeIdentifier host, RetainPtr<FS>&& guest_fs)
: m_host(host) : m_host(host)
, m_guest(guest_fs->rootInode()) , m_guest(guest_fs->rootInode())
, m_guest_fs(move(guest_fs)) , m_guest_fs(move(guest_fs))

View file

@ -49,8 +49,8 @@ public:
void retain(); void retain();
void release(); void release();
FileSystem* fileSystem() { return inode.fileSystem(); } FS* fileSystem() { return inode.fileSystem(); }
const FileSystem* fileSystem() const { return inode.fileSystem(); } const FS* fileSystem() const { return inode.fileSystem(); }
VFS* vfs() { return m_vfs; } VFS* vfs() { return m_vfs; }
const VFS* vfs() const { return m_vfs; } const VFS* vfs() const { return m_vfs; }
@ -80,17 +80,17 @@ public:
class Mount { class Mount {
public: public:
Mount(InodeIdentifier host, RetainPtr<FileSystem>&&); Mount(InodeIdentifier host, RetainPtr<FS>&&);
InodeIdentifier host() const { return m_host; } InodeIdentifier host() const { return m_host; }
InodeIdentifier guest() const { return m_guest; } InodeIdentifier guest() const { return m_guest; }
const FileSystem& guest_fs() const { return *m_guest_fs; } const FS& guest_fs() const { return *m_guest_fs; }
private: private:
InodeIdentifier m_host; InodeIdentifier m_host;
InodeIdentifier m_guest; InodeIdentifier m_guest;
RetainPtr<FileSystem> m_guest_fs; RetainPtr<FS> m_guest_fs;
}; };
static VFS& the() PURE; static VFS& the() PURE;
@ -110,8 +110,8 @@ public:
Vnode* root() { return m_root_vnode.ptr(); } Vnode* root() { return m_root_vnode.ptr(); }
const Vnode* root() const { return m_root_vnode.ptr(); } const Vnode* root() const { return m_root_vnode.ptr(); }
bool mount_root(RetainPtr<FileSystem>&&); bool mount_root(RetainPtr<FS>&&);
bool mount(RetainPtr<FileSystem>&&, const String& path); bool mount(RetainPtr<FS>&&, const String& path);
RetainPtr<FileDescriptor> open(CharacterDevice&, int options); RetainPtr<FileDescriptor> open(CharacterDevice&, int options);
RetainPtr<FileDescriptor> open(const String& path, int& error, int options = 0, InodeIdentifier base = InodeIdentifier()); RetainPtr<FileDescriptor> open(const String& path, int& error, int options = 0, InodeIdentifier base = InodeIdentifier());
@ -135,7 +135,7 @@ private:
bool is_vfs_root(InodeIdentifier) const; bool is_vfs_root(InodeIdentifier) const;
void traverse_directory_inode(CoreInode&, Function<bool(const FileSystem::DirectoryEntry&)>); void traverse_directory_inode(CoreInode&, Function<bool(const FS::DirectoryEntry&)>);
InodeIdentifier resolve_path(const String& path, int& error, CoreInode& base, int options = 0); InodeIdentifier resolve_path(const String& path, int& error, CoreInode& base, int options = 0);
InodeIdentifier resolve_path(const String& path, int& error, InodeIdentifier base = InodeIdentifier(), int options = 0); InodeIdentifier resolve_path(const String& path, int& error, InodeIdentifier base = InodeIdentifier(), int options = 0);
InodeIdentifier resolveSymbolicLink(InodeIdentifier base, InodeIdentifier symlinkInode, int& error); InodeIdentifier resolveSymbolicLink(InodeIdentifier base, InodeIdentifier symlinkInode, int& error);

View file

@ -14,7 +14,7 @@
#include <AK/kmalloc.h> #include <AK/kmalloc.h>
#include <AK/ktime.h> #include <AK/ktime.h>
static RetainPtr<FileSystem> makeFileSystem(const char* imagePath); static RetainPtr<FS> makeFileSystem(const char* imagePath);
int main(int c, char** v) int main(int c, char** v)
{ {
@ -72,8 +72,8 @@ int main(int c, char** v)
return 0; return 0;
} }
auto synthfs = SyntheticFileSystem::create(); auto synthfs = SynthFS::create();
bool success = static_cast<FileSystem&>(*synthfs).initialize(); bool success = static_cast<FS&>(*synthfs).initialize();
printf("synth->initialize(): returned %u\n", success); printf("synth->initialize(): returned %u\n", success);
vfs.mount(std::move(synthfs), "/syn"); vfs.mount(std::move(synthfs), "/syn");
@ -234,16 +234,16 @@ int main(int c, char** v)
return 0; return 0;
} }
RetainPtr<FileSystem> makeFileSystem(const char* imagePath) RetainPtr<FS> makeFileSystem(const char* imagePath)
{ {
auto fsImage = FileBackedDiskDevice::create(imagePath, 512); auto fsImage = FileBackedDiskDevice::create(imagePath, 512);
if (!fsImage->isValid()) { if (!fsImage->isValid()) {
fprintf(stderr, "Failed to open fs image file '%s'\n", imagePath); fprintf(stderr, "Failed to open fs image file '%s'\n", imagePath);
exit(1); exit(1);
} }
auto ext2 = Ext2FileSystem::create(std::move(fsImage)); auto ext2 = Ext2FS::create(std::move(fsImage));
bool success = static_cast<FileSystem&>(*ext2).initialize(); bool success = static_cast<FS&>(*ext2).initialize();
printf("ext2->initialize(): returned %u\n", success); printf("ext2->initialize(): returned %u\n", success);
return ext2; return ext2;
} }