diff --git a/deps/ox/src/ox/fs/filestore/filestoretemplate.hpp b/deps/ox/src/ox/fs/filestore/filestoretemplate.hpp index 97f2fdd9..0d67e7e4 100644 --- a/deps/ox/src/ox/fs/filestore/filestoretemplate.hpp +++ b/deps/ox/src/ox/fs/filestore/filestoretemplate.hpp @@ -106,13 +106,15 @@ class FileStoreTemplate { * @return 0 if read is a success */ template - [[nodiscard]] Error read(InodeId_t id, FsSize_t readStart, + [[nodiscard]] ox::Error read(InodeId_t id, FsSize_t readStart, FsSize_t readSize, T *data, FsSize_t *size) const; [[nodiscard]] ValErr stat(InodeId_t id); - [[nodiscard]] Error resize(std::size_t size, void *newBuff = nullptr); + void resize(); + + [[nodiscard]] ox::Error resize(std::size_t size, void *newBuff = nullptr); [[nodiscard]] InodeId_t spaceNeeded(FsSize_t size); @@ -409,6 +411,12 @@ const ptrarith::Ptr FileStoreTemplate::read(InodeI } } +template +void FileStoreTemplate::resize() { + compact(); + m_buffSize = size() - available(); +} + template Error FileStoreTemplate::resize(std::size_t size, void *newBuff) { m_buffSize = size; @@ -484,6 +492,7 @@ void FileStoreTemplate::compact() { << "from" << oldAddr << "to" << item.offset(); auto parent = findParent(rootInode(), item); + oxAssert(parent.valid(), "Parent inode not found."); if (parent.valid()) { if (parent->left == oldAddr) { parent->left = item; diff --git a/deps/ox/src/ox/fs/filesystem/filesystem.hpp b/deps/ox/src/ox/fs/filesystem/filesystem.hpp index 28234974..3e1a3204 100644 --- a/deps/ox/src/ox/fs/filesystem/filesystem.hpp +++ b/deps/ox/src/ox/fs/filesystem/filesystem.hpp @@ -102,6 +102,11 @@ class FileSystemTemplate: public FileSystem { [[nodiscard]] ox::Error remove(const char *path, bool recursive = false) override; + /** + * Resizes FileSystem to minimum possible size. + */ + void resize(); + [[nodiscard]] ox::Error resize(uint64_t size, void *buffer = nullptr) override; [[nodiscard]] ox::Error write(const char *path, void *buffer, uint64_t size, uint8_t fileType = FileType_NormalFile) override; @@ -237,6 +242,11 @@ ox::Error FileSystemTemplate::remove(const char *path, boo return OxError(0); } +template +void FileSystemTemplate::resize() { + m_fs.resize(); +} + template ox::Error FileSystemTemplate::resize(uint64_t size, void *buffer) { oxReturnError(m_fs.resize(size, buffer));