diff --git a/deps/ox/src/ox/fs/filesystem.cpp b/deps/ox/src/ox/fs/filesystem.cpp index d2f203e8..ceeaa5fb 100644 --- a/deps/ox/src/ox/fs/filesystem.cpp +++ b/deps/ox/src/ox/fs/filesystem.cpp @@ -10,7 +10,7 @@ namespace ox { -FileSystem *createFileSystem(void *buff, size_t buffSize, bool autoExpand) { +FileSystem *createFileSystem(uint8_t *buff, size_t buffSize, bool ownsBuff) { auto version = ((FileStore16*) buff)->version(); auto type = ((FileStore16*) buff)->fsType(); FileSystem *fs = nullptr; @@ -19,13 +19,13 @@ FileSystem *createFileSystem(void *buff, size_t buffSize, bool autoExpand) { case 5: switch (type) { case ox::OxFS_16: - fs = new FileSystem16(buff, autoExpand); + fs = new FileSystem16(buff, ownsBuff); break; case ox::OxFS_32: - fs = new FileSystem32(buff, autoExpand); + fs = new FileSystem32(buff, ownsBuff); break; case ox::OxFS_64: - fs = new FileSystem64(buff, autoExpand); + fs = new FileSystem64(buff, ownsBuff); break; } break; diff --git a/deps/ox/src/ox/fs/filesystem.hpp b/deps/ox/src/ox/fs/filesystem.hpp index f41b2c35..437d2e87 100644 --- a/deps/ox/src/ox/fs/filesystem.hpp +++ b/deps/ox/src/ox/fs/filesystem.hpp @@ -248,7 +248,7 @@ int FileSystem::ls(const char *path, List *list) { return err; } -FileSystem *createFileSystem(void *buff, size_t buffSize, bool autoExpand = false); +FileSystem *createFileSystem(uint8_t *buff, size_t buffSize, bool ownsBuff = false); /** * Creates a larger version of the given FileSystem. @@ -266,7 +266,7 @@ class FileSystemTemplate: public FileSystem { private: FileStore *m_store = nullptr; - bool m_autoExpand = false; + bool m_ownsBuff = false; public: // static members @@ -274,7 +274,9 @@ class FileSystemTemplate: public FileSystem { static typename FileStore::InodeId_t INODE_ROOT_DIR; static typename FileStore::InodeId_t INODE_RESERVED_END; - explicit FileSystemTemplate(void *buff, bool autoExpand = false); + explicit FileSystemTemplate(uint8_t *buff, bool ownsBuff = false); + + ~FileSystemTemplate(); int stripDirectories() override; @@ -324,7 +326,7 @@ class FileSystemTemplate: public FileSystem { */ int rmDirectoryEntry(const char *path); - static uint8_t *format(void *buffer, typename FileStore::FsSize_t size, bool useDirectories); + static uint8_t *format(uint8_t *buffer, typename FileStore::FsSize_t size, bool useDirectories); protected: int readDirectory(const char *path, Directory *dirOut) override; @@ -338,9 +340,16 @@ class FileSystemTemplate: public FileSystem { }; template -FileSystemTemplate::FileSystemTemplate(void *buff, bool autoExpand) { +FileSystemTemplate::FileSystemTemplate(uint8_t *buff, bool ownsBuff) { m_store = (FileStore*) buff; - m_autoExpand = autoExpand; + m_ownsBuff = ownsBuff; +} + +template +FileSystemTemplate::~FileSystemTemplate() { + if (m_ownsBuff) { + delete (uint8_t*) m_store; + } } template @@ -551,7 +560,7 @@ int FileSystemTemplate::write(const char *path, void *buffer #endif template int FileSystemTemplate::write(uint64_t inode, void *buffer, uint64_t size, uint8_t fileType) { - if (m_autoExpand) { + if (m_ownsBuff) { while (m_store->spaceNeeded(size) > m_store->available()) { expand(this->size() * 2); } @@ -627,12 +636,12 @@ uint8_t *FileSystemTemplate::buff() { #pragma warning(disable:4244) #endif template -uint8_t *FileSystemTemplate::format(void *buffer, typename FileStore::FsSize_t size, bool useDirectories) { - buffer = FileStore::format((uint8_t*) buffer, size, (uint16_t) FS_TYPE); +uint8_t *FileSystemTemplate::format(uint8_t *buffer, typename FileStore::FsSize_t size, bool useDirectories) { + buffer = FileStore::format(buffer, size, (uint16_t) FS_TYPE); if (buffer && useDirectories) { Directory dir; - FileSystemTemplate fs(buffer); + FileSystemTemplate fs((uint8_t*) buffer); fs.write(INODE_ROOT_DIR, &dir, sizeof(dir), FileType::FileType_Directory); } diff --git a/deps/ox/src/ox/fs/oxfstool.cpp b/deps/ox/src/ox/fs/oxfstool.cpp index fd40e82a..ee241245 100644 --- a/deps/ox/src/ox/fs/oxfstool.cpp +++ b/deps/ox/src/ox/fs/oxfstool.cpp @@ -30,12 +30,12 @@ const static auto usage = "usage:\n" "\toxfs compact \n" "\toxfs version\n"; -char *loadFileBuff(FILE *file, ::size_t *sizeOut = nullptr) { +uint8_t *loadFileBuff(FILE *file, ::size_t *sizeOut = nullptr) { if (file) { fseek(file, 0, SEEK_END); const auto size = ftell(file); rewind(file); - auto buff = new char[size]; + auto buff = new uint8_t[size]; auto itemsRead = fread(buff, size, 1, file); fclose(file); if (sizeOut) { @@ -47,7 +47,7 @@ char *loadFileBuff(FILE *file, ::size_t *sizeOut = nullptr) { } } -char *loadFileBuff(const char *path, ::size_t *sizeOut = nullptr) { +uint8_t *loadFileBuff(const char *path, ::size_t *sizeOut = nullptr) { return loadFileBuff(fopen(path, "rb"), sizeOut); }