diff --git a/src/ox/fs/filesystem/directory.hpp b/src/ox/fs/filesystem/directory.hpp index 6acd9e13f..eb2832392 100644 --- a/src/ox/fs/filesystem/directory.hpp +++ b/src/ox/fs/filesystem/directory.hpp @@ -133,7 +133,7 @@ template Error Directory::init() noexcept { constexpr auto Size = sizeof(Buffer); oxTrace("ox::fs::Directory::init") << "Initializing Directory with Inode ID:" << m_inodeId; - oxReturnError(m_fs.write(m_inodeId, nullptr, Size, FileType_Directory)); + oxReturnError(m_fs.write(m_inodeId, nullptr, Size, static_cast(FileType::Directory))); auto buff = m_fs.read(m_inodeId).template to(); if (!buff.valid()) { m_size = 0; @@ -253,7 +253,7 @@ Error Directory::write(PathIterator path, InodeId_t inode, oxTrace("ox::fs::Directory::write") << "Attempting to write Directory entry:" << name->data(); oxTrace("ox::fs::Directory::write") << "Attempting to write Directory to FileStore"; oxReturnError(val->init(inode, name->data(), val.size())); - return m_fs.write(m_inodeId, cpy, cpy->size(), FileType_Directory); + return m_fs.write(m_inodeId, cpy, cpy->size(), static_cast(FileType::Directory)); } } diff --git a/src/ox/fs/filesystem/filesystem.cpp b/src/ox/fs/filesystem/filesystem.cpp index d68945470..5435b4e87 100644 --- a/src/ox/fs/filesystem/filesystem.cpp +++ b/src/ox/fs/filesystem/filesystem.cpp @@ -72,7 +72,7 @@ Error FileSystem::remove(const FileAddress &addr, bool recursive) noexcept { } } -Error FileSystem::write(const FileAddress &addr, void *buffer, uint64_t size, uint8_t fileType) noexcept { +Error FileSystem::write(const FileAddress &addr, void *buffer, uint64_t size, FileType fileType) noexcept { switch (addr.type()) { case FileAddressType::Inode: return write(addr.getInode().value, buffer, size, fileType); diff --git a/src/ox/fs/filesystem/filesystem.hpp b/src/ox/fs/filesystem/filesystem.hpp index 2e6daf080..892e009a8 100644 --- a/src/ox/fs/filesystem/filesystem.hpp +++ b/src/ox/fs/filesystem/filesystem.hpp @@ -23,7 +23,7 @@ class FileSystem { public: virtual ~FileSystem() noexcept = default; - virtual Error mkdir(const char *path, bool recursive = false) noexcept = 0; + virtual Error mkdir(const char *path, bool recursive) noexcept = 0; /** * Moves an entry from one directory to another. @@ -48,23 +48,24 @@ class FileSystem { Error read(const FileAddress &addr, std::size_t readStart, std::size_t readSize, void *buffer, std::size_t *size) noexcept; + [[maybe_unused]] Result directAccess(const FileAddress &addr) noexcept; Result> ls(const String &dir) noexcept; virtual Result> ls(const char *dir) noexcept = 0; - virtual Error remove(const char *path, bool recursive = false) noexcept = 0; + virtual Error remove(const char *path, bool recursive) noexcept = 0; Error remove(const FileAddress &addr, bool recursive = false) noexcept; - virtual Error resize(uint64_t size, void *buffer = nullptr) noexcept = 0; + virtual Error resize(uint64_t size, void *buffer) noexcept = 0; - virtual Error write(const char *path, void *buffer, uint64_t size, uint8_t fileType = FileType_NormalFile) noexcept = 0; + virtual Error write(const char *path, void *buffer, uint64_t size, FileType fileType) noexcept = 0; - virtual Error write(uint64_t inode, void *buffer, uint64_t size, uint8_t fileType = FileType_NormalFile) noexcept = 0; + virtual Error write(uint64_t inode, void *buffer, uint64_t size, FileType fileType) noexcept = 0; - Error write(const FileAddress &addr, void *buffer, uint64_t size, uint8_t fileType = FileType_NormalFile) noexcept; + Error write(const FileAddress &addr, void *buffer, uint64_t size, FileType fileType = FileType::NormalFile) noexcept; virtual Result stat(uint64_t inode) noexcept = 0; @@ -110,15 +111,15 @@ class FileSystemTemplate: public FileSystem { public: FileSystemTemplate() noexcept = default; - FileSystemTemplate(void *buffer, uint64_t bufferSize, void(*freeBuffer)(char*) = [](char *buff) { delete buff; }) noexcept; + FileSystemTemplate(void *buffer, uint64_t bufferSize, void(*freeBuffer)(char*) = [](const char *buff) { delete buff; }) noexcept; - FileSystemTemplate(FileStore fs) noexcept; + explicit FileSystemTemplate(FileStore fs) noexcept; - ~FileSystemTemplate() noexcept; + ~FileSystemTemplate() noexcept override; static Error format(void *buff, uint64_t buffSize) noexcept; - Error mkdir(const char *path, bool recursive = false) noexcept override; + Error mkdir(const char *path, bool recursive) noexcept override; Error move(const char *src, const char *dest) noexcept override; @@ -132,23 +133,23 @@ class FileSystemTemplate: public FileSystem { Result directAccess(uint64_t) noexcept override; - Result> ls(const char *dir) noexcept override; + Result> ls(const char *path) noexcept override; template - Error ls(const char *dir, F cb); + Error ls(const char *path, F cb); - Error remove(const char *path, bool recursive = false) noexcept override; + Error remove(const char *path, bool recursive) noexcept override; /** * Resizes FileSystem to minimum possible size. */ Error resize() noexcept; - Error resize(uint64_t size, void *buffer = nullptr) noexcept override; + Error resize(uint64_t size, void *buffer) noexcept override; - Error write(const char *path, void *buffer, uint64_t size, uint8_t fileType = FileType_NormalFile) noexcept override; + Error write(const char *path, void *buffer, uint64_t size, FileType fileType) noexcept override; - Error write(uint64_t inode, void *buffer, uint64_t size, uint8_t fileType = FileType_NormalFile) noexcept override; + Error write(uint64_t inode, void *buffer, uint64_t size, FileType fileType) noexcept override; Result stat(uint64_t inode) noexcept override; @@ -164,6 +165,7 @@ class FileSystemTemplate: public FileSystem { Error walk(Error(*cb)(uint8_t, uint64_t, uint64_t)) noexcept override; + [[nodiscard]] bool valid() const noexcept override; private: @@ -220,7 +222,7 @@ Error FileSystemTemplate::format(void *buff, uint64_t buff template Error FileSystemTemplate::mkdir(const char *path, bool recursive) noexcept { - oxTrace("ox::fs::FileSystemTemplate::mkdir") << "path:" << path << "recursive:" << recursive; + oxTracef("ox::fs::FileSystemTemplate::mkdir", "path: {}, recursive: {}", path, recursive); oxRequireM(rootDir, this->rootDir()); return rootDir.mkdir(path, recursive); } @@ -295,7 +297,7 @@ Error FileSystemTemplate::remove(const char *path, bool re Directory rootDir(m_fs, fd.rootDirInode); oxRequire(inode, rootDir.find(path)); oxRequire(st, stat(inode)); - if (st.fileType == FileType_NormalFile || recursive) { + if (st.fileType == FileType::NormalFile || recursive) { if (auto err = rootDir.remove(path)) { // removal failed, try putting the index back oxLogError(rootDir.write(path, inode)); @@ -320,7 +322,7 @@ Error FileSystemTemplate::resize(uint64_t size, void *buff } template -Error FileSystemTemplate::write(const char *path, void *buffer, uint64_t size, uint8_t fileType) noexcept { +Error FileSystemTemplate::write(const char *path, void *buffer, uint64_t size, FileType fileType) noexcept { auto [inode, err] = find(path); if (err) { oxRequire(generatedId, m_fs.generateInodeId()); @@ -333,8 +335,8 @@ Error FileSystemTemplate::write(const char *path, void *bu } template -Error FileSystemTemplate::write(uint64_t inode, void *buffer, uint64_t size, uint8_t fileType) noexcept { - return m_fs.write(inode, buffer, size, fileType); +Error FileSystemTemplate::write(uint64_t inode, void *buffer, uint64_t size, FileType fileType) noexcept { + return m_fs.write(inode, buffer, size, static_cast(fileType)); } template @@ -344,7 +346,7 @@ Result FileSystemTemplate::stat(uint64_t inode) out.inode = s.inode; out.links = s.links; out.size = s.size; - out.fileType = s.fileType; + out.fileType = static_cast(s.fileType); return out; } diff --git a/src/ox/fs/filesystem/passthroughfs.cpp b/src/ox/fs/filesystem/passthroughfs.cpp index 81567b85c..104bf3073 100644 --- a/src/ox/fs/filesystem/passthroughfs.cpp +++ b/src/ox/fs/filesystem/passthroughfs.cpp @@ -119,7 +119,7 @@ Error PassThroughFS::resize(uint64_t, void*) noexcept { return OxError(1, "resize is not supported by PassThroughFS"); } -Error PassThroughFS::write(const char *path, void *buffer, uint64_t size, uint8_t) noexcept { +Error PassThroughFS::write(const char *path, void *buffer, uint64_t size, FileType) noexcept { const auto p = (m_path / stripSlash(path)); try { std::ofstream f(p, std::ios::binary); @@ -131,7 +131,7 @@ Error PassThroughFS::write(const char *path, void *buffer, uint64_t size, uint8_ return OxError(0); } -Error PassThroughFS::write(uint64_t, void*, uint64_t, uint8_t) noexcept { +Error PassThroughFS::write(uint64_t, void*, uint64_t, FileType) noexcept { // unsupported return OxError(1, "write(uint64_t, void*, uint64_t, uint8_t) is not supported by PassThroughFS"); } @@ -144,10 +144,10 @@ Result PassThroughFS::stat(uint64_t) noexcept { Result PassThroughFS::stat(const char *path) noexcept { std::error_code ec; const auto p = m_path / stripSlash(path); - const uint8_t type = std::filesystem::is_directory(p, ec) ? - FileType_Directory : FileType_NormalFile; + const FileType type = std::filesystem::is_directory(p, ec) ? + FileType::Directory : FileType::NormalFile; oxTrace("ox::fs::PassThroughFS::stat") << ec.message().c_str() << path; - const uint64_t size = type == FileType_Directory ? 0 : std::filesystem::file_size(p, ec); + const uint64_t size = type == FileType::Directory ? 0 : std::filesystem::file_size(p, ec); oxTrace("ox::fs::PassThroughFS::stat") << ec.message().c_str() << path; oxTrace("ox::fs::PassThroughFS::stat::size") << path << size; oxReturnError(OxError(ec.value())); diff --git a/src/ox/fs/filesystem/passthroughfs.hpp b/src/ox/fs/filesystem/passthroughfs.hpp index 558ef8c1a..1df8dc270 100644 --- a/src/ox/fs/filesystem/passthroughfs.hpp +++ b/src/ox/fs/filesystem/passthroughfs.hpp @@ -32,7 +32,7 @@ class PassThroughFS: public FileSystem { public: PassThroughFS(const char *dirPath); - ~PassThroughFS(); + ~PassThroughFS() override; [[nodiscard]] String basePath(); @@ -60,9 +60,9 @@ class PassThroughFS: public FileSystem { Error resize(uint64_t size, void *buffer = nullptr) noexcept override; - Error write(const char *path, void *buffer, uint64_t size, uint8_t fileType = FileType_NormalFile) noexcept override; + Error write(const char *path, void *buffer, uint64_t size, FileType fileType = FileType::NormalFile) noexcept override; - Error write(uint64_t inode, void *buffer, uint64_t size, uint8_t fileType = FileType_NormalFile) noexcept override; + Error write(uint64_t inode, void *buffer, uint64_t size, FileType fileType = FileType::NormalFile) noexcept override; Result stat(uint64_t inode) noexcept override; diff --git a/src/ox/fs/filesystem/types.hpp b/src/ox/fs/filesystem/types.hpp index a8250c3b0..370850aa4 100644 --- a/src/ox/fs/filesystem/types.hpp +++ b/src/ox/fs/filesystem/types.hpp @@ -12,22 +12,17 @@ namespace ox { -enum FsType { - OxFS_16 = 1, - OxFS_32 = 2, - OxFS_64 = 3 -}; - -enum FileType { - FileType_NormalFile = 1, - FileType_Directory = 2 +enum class FileType: uint8_t { + None = 0, + NormalFile = 1, + Directory = 2 }; constexpr const char *toString(FileType t) { switch (t) { - case FileType_NormalFile: + case FileType::NormalFile: return "Normal File"; - case FileType_Directory: + case FileType::Directory: return "Directory"; default: return ""; @@ -38,7 +33,7 @@ struct FileStat { uint64_t inode = 0; uint64_t links = 0; uint64_t size = 0; - uint8_t fileType = 0; + FileType fileType = FileType::None; }; }