[ox/fs] Add resize compactor
This commit is contained in:
parent
baff558ff2
commit
6571129686
@ -106,13 +106,15 @@ class FileStoreTemplate {
|
||||
* @return 0 if read is a success
|
||||
*/
|
||||
template<typename T>
|
||||
[[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<StatInfo> 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<uint8_t, std::size_t> FileStoreTemplate<size_t>::read(InodeI
|
||||
}
|
||||
}
|
||||
|
||||
template<typename size_t>
|
||||
void FileStoreTemplate<size_t>::resize() {
|
||||
compact();
|
||||
m_buffSize = size() - available();
|
||||
}
|
||||
|
||||
template<typename size_t>
|
||||
Error FileStoreTemplate<size_t>::resize(std::size_t size, void *newBuff) {
|
||||
m_buffSize = size;
|
||||
@ -484,6 +492,7 @@ void FileStoreTemplate<size_t>::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;
|
||||
|
10
deps/ox/src/ox/fs/filesystem/filesystem.hpp
vendored
10
deps/ox/src/ox/fs/filesystem/filesystem.hpp
vendored
@ -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<FileStore, Directory>::remove(const char *path, boo
|
||||
return OxError(0);
|
||||
}
|
||||
|
||||
template<typename FileStore, typename Directory>
|
||||
void FileSystemTemplate<FileStore, Directory>::resize() {
|
||||
m_fs.resize();
|
||||
}
|
||||
|
||||
template<typename FileStore, typename Directory>
|
||||
ox::Error FileSystemTemplate<FileStore, Directory>::resize(uint64_t size, void *buffer) {
|
||||
oxReturnError(m_fs.resize(size, buffer));
|
||||
|
Loading…
x
Reference in New Issue
Block a user