From baff558ff211ed042e0feb8d67ddb20df6caa1cd Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Sat, 22 Jun 2019 11:50:44 -0500 Subject: [PATCH] [ox/fs] Enforce error handling in Directory --- deps/ox/src/ox/fs/filesystem/directory.hpp | 36 +++++++++------------ deps/ox/src/ox/fs/filesystem/filesystem.hpp | 7 ++-- 2 files changed, 19 insertions(+), 24 deletions(-) diff --git a/deps/ox/src/ox/fs/filesystem/directory.hpp b/deps/ox/src/ox/fs/filesystem/directory.hpp index 81a4219d..e79fc421 100644 --- a/deps/ox/src/ox/fs/filesystem/directory.hpp +++ b/deps/ox/src/ox/fs/filesystem/directory.hpp @@ -41,11 +41,7 @@ struct __attribute__((packed)) DirectoryEntry { public: DirectoryEntry() = default; - DirectoryEntry(InodeId_t inode, const char *name, InodeId_t bufferSize) { - init(inode, name, bufferSize); - } - - ox::Error init(InodeId_t inode, const char *name, InodeId_t bufferSize) { + [[nodiscard]] ox::Error init(InodeId_t inode, const char *name, InodeId_t bufferSize) { m_bufferSize = bufferSize; auto d = data(); if (d.valid()) { @@ -241,7 +237,7 @@ ox::Error Directory::write(PathIterator path, InodeId_t in auto val = cpy->malloc(entryDataSize); if (val.valid()) { oxTrace("ox::fs::Directory::write") << "Attempting to write Directory to FileStore"; - val->init(inode, name->data(), entrySize); + oxReturnError(val->init(inode, name->data(), entrySize)); return m_fs.write(m_inodeId, cpy, cpy->size()); } else { oxTrace("ox::fs::Directory::write::fail") << "Could not allocate memory for new directory entry"; @@ -294,22 +290,22 @@ template ox::Error Directory::ls(F cb) noexcept { oxTrace("ox::fs::Directory::ls"); auto buff = m_fs.read(m_inodeId).template to(); - if (buff.valid()) { - oxTrace("ox::fs::Directory::ls") << "Found directory buffer."; - for (auto i = buff->iterator(); i.valid(); i.next()) { - auto data = i->data(); - if (data.valid()) { - oxReturnError(cb(data->name, data->inode)); - } else { - oxTrace("ox::fs::Directory::ls") << "INVALID DIRECTORY ENTRY"; - } - } - oxTrace("ox::fs::Directory::ls::fail"); - return OxError(1); - } else { + if (!buff.valid()) { oxTrace("ox::fs::Directory::ls::fail") << "Could not directory buffer"; - return OxError(2); + return OxError(1); } + + oxTrace("ox::fs::Directory::ls") << "Found directory buffer."; + for (auto i = buff->iterator(); i.valid(); i.next()) { + auto data = i->data(); + if (data.valid()) { + oxReturnError(cb(data->name, data->inode)); + } else { + oxTrace("ox::fs::Directory::ls") << "INVALID DIRECTORY ENTRY"; + } + } + + return OxError(0); } template diff --git a/deps/ox/src/ox/fs/filesystem/filesystem.hpp b/deps/ox/src/ox/fs/filesystem/filesystem.hpp index 9df155d7..28234974 100644 --- a/deps/ox/src/ox/fs/filesystem/filesystem.hpp +++ b/deps/ox/src/ox/fs/filesystem/filesystem.hpp @@ -209,10 +209,9 @@ ox::Error FileSystemTemplate::read(uint64_t inode, std::si template template ox::Error FileSystemTemplate::ls(const char *path, F cb) { - auto s = stat(path); - oxReturnError(s.error); - - Directory dir(m_fs, s.value.inode); + auto [s, err] = stat(path); + oxReturnError(err); + Directory dir(m_fs, s.inode); return dir.ls(cb); }