diff --git a/src/ox/fs/filestore.hpp b/src/ox/fs/filestore.hpp index 41cf65331..fbeff9205 100644 --- a/src/ox/fs/filestore.hpp +++ b/src/ox/fs/filestore.hpp @@ -29,7 +29,7 @@ class FileStore { private: struct Inode { // the next Inode in memory - FsSize_t next; + FsSize_t prev, next; // The following variables should not be assumed to exist FsSize_t dataLen; @@ -49,7 +49,6 @@ class FileStore { uint32_t m_version; FsSize_t m_size; FsSize_t m_rootInode; - FsSize_t m_lastInode; public: /** @@ -262,7 +261,8 @@ void *FileStore::alloc(FsSize_t size) { const auto inode = ptr(retval); memset(inode, 0, size); inode->next = retval + size; - m_lastInode = retval; + ptr(m_rootInode)->prev = retval; + ptr(inode->next)->prev = retval; return inode; } @@ -319,7 +319,7 @@ typename FileStore::Inode *FileStore::firstInode() { template typename FileStore::Inode *FileStore::lastInode() { - return ptr(m_lastInode); + return ptr(ptr(m_rootInode)->prev); } template @@ -335,9 +335,8 @@ uint8_t *FileStore::format(uint8_t *buffer, FsSize_t size) { fs->m_version = FileStore::version(); fs->m_size = size; fs->m_rootInode = sizeof(FileStore); - fs->m_lastInode = sizeof(FileStore); fs->lastInode()->m_id = 0; - fs->lastInode()->next = fs->m_lastInode; + fs->lastInode()->next = sizeof(FileStore); return (uint8_t*) buffer; }