diff --git a/deps/ox/src/ox/fs/filestore/filestore.hpp b/deps/ox/src/ox/fs/filestore/filestore.hpp deleted file mode 100644 index 45f2ee53..00000000 --- a/deps/ox/src/ox/fs/filestore/filestore.hpp +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright 2015 - 2018 gtalent2@gmail.com - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ - -#pragma once - -#include - -namespace ox::fs { - -using InodeId_t = uint64_t; -using FsSize_t = std::size_t; - -class FileStore { - - public: - struct StatInfo { - InodeId_t inode = 0; - InodeId_t links = 0; - FsSize_t size = 0; - uint8_t fileType = 0; - }; - - virtual Error format() = 0; - - virtual Error setSize(InodeId_t size) = 0; - - virtual Error incLinks(InodeId_t id) = 0; - - virtual Error decLinks(InodeId_t id) = 0; - - virtual Error write(InodeId_t id, void *data, FsSize_t dataLen, uint8_t fileType = 0) = 0; - - /** - * @return error if the inode could not be removed or did not exist - */ - virtual Error remove(InodeId_t id) = 0; - - virtual Error read(InodeId_t id, void *data, FsSize_t dataSize, std::size_t *size = nullptr) = 0; - - virtual Error read(InodeId_t id, FsSize_t readStart, FsSize_t readSize, void *data, FsSize_t *size = nullptr) = 0; - - /** - * @return data section of the requested file - */ - virtual const ptrarith::Ptr read(InodeId_t id) = 0; - - virtual ValErr stat(InodeId_t id) = 0; - - virtual Error resize(std::size_t size, void *newBuff = nullptr) = 0; - - virtual InodeId_t spaceNeeded(FsSize_t size) = 0; - - virtual InodeId_t size() = 0; - - virtual InodeId_t available() = 0; - - /** - * @return a pointer to the buffer of the file system, or null if not - * applicable - */ - virtual uint8_t *buff() = 0; - - virtual Error walk(Error(*cb)(uint8_t, uint64_t, uint64_t)) = 0; - - virtual ValErr generateInodeId() = 0; - -}; - -} diff --git a/deps/ox/src/ox/fs/filestore/filestoretemplate.hpp b/deps/ox/src/ox/fs/filestore/filestoretemplate.hpp index d022e559..e556185e 100644 --- a/deps/ox/src/ox/fs/filestore/filestoretemplate.hpp +++ b/deps/ox/src/ox/fs/filestore/filestoretemplate.hpp @@ -10,10 +10,18 @@ #include -#include "filestore.hpp" - namespace ox::fs { +using InodeId_t = uint64_t; +using FsSize_t = std::size_t; + +struct StatInfo { + InodeId_t inode = 0; + InodeId_t links = 0; + FsSize_t size = 0; + uint8_t fileType = 0; +}; + template struct __attribute__((packed)) FileStoreItem: public ptrarith::Item { ox::LittleEndian id = 0; @@ -43,7 +51,10 @@ struct __attribute__((packed)) FileStoreItem: public ptrarith::Item { template -class FileStoreTemplate: public FileStore { +class FileStoreTemplate { + + public: + using InodeId_t = size_t; private: using Item = FileStoreItem; @@ -51,6 +62,7 @@ class FileStoreTemplate: public FileStore { using Buffer = ptrarith::NodeBuffer>; static constexpr InodeId_t ReservedInodeEnd = 100; + static constexpr auto MaxInode = MaxValue / 2; struct __attribute__((packed)) FileStoreData { ox::LittleEndian rootNode = 0; @@ -63,23 +75,23 @@ class FileStoreTemplate: public FileStore { public: FileStoreTemplate(void *buff, size_t buffSize); - Error format() override; + Error format(); - Error setSize(InodeId_t buffSize) override; + Error setSize(InodeId_t buffSize); - Error incLinks(InodeId_t id) override; + Error incLinks(InodeId_t id); - Error decLinks(InodeId_t id) override; + Error decLinks(InodeId_t id); - Error write(InodeId_t id, void *data, FsSize_t dataLen, uint8_t fileType = 0) override; + Error write(InodeId_t id, void *data, FsSize_t dataLen, uint8_t fileType = 0); - Error remove(InodeId_t id) override; + Error remove(InodeId_t id); - Error read(InodeId_t id, void *data, FsSize_t dataSize, FsSize_t *size) override; + Error read(InodeId_t id, void *data, FsSize_t dataSize, FsSize_t *size = nullptr); - Error read(InodeId_t id, FsSize_t readStart, FsSize_t readSize, void *data, FsSize_t *size) override; + Error read(InodeId_t id, FsSize_t readStart, FsSize_t readSize, void *data, FsSize_t *size = nullptr); - const ptrarith::Ptr read(InodeId_t id) override; + const ptrarith::Ptr read(InodeId_t id); /** * Reads the "file" at the given id. You are responsible for freeing @@ -93,24 +105,26 @@ class FileStoreTemplate: public FileStore { */ template Error read(InodeId_t id, FsSize_t readStart, - FsSize_t readSize, T *data, - FsSize_t *size); + FsSize_t readSize, T *data, + FsSize_t *size); - ValErr stat(InodeId_t id) override; + ValErr stat(InodeId_t id); - Error resize(std::size_t size, void *newBuff = nullptr) override; + Error resize(std::size_t size, void *newBuff = nullptr); - InodeId_t spaceNeeded(FsSize_t size) override; + InodeId_t spaceNeeded(FsSize_t size); - InodeId_t size() override; + InodeId_t size(); - InodeId_t available() override; + InodeId_t available(); - uint8_t *buff() override; + uint8_t *buff(); - Error walk(Error(*cb)(uint8_t, uint64_t, uint64_t)) override; + Error walk(Error(*cb)(uint8_t, uint64_t, uint64_t)); - ValErr generateInodeId() override; + ValErr generateInodeId(); + + bool valid() const; private: void compact(); @@ -165,8 +179,6 @@ class FileStoreTemplate: public FileStore { bool canWrite(ItemPtr existing, size_t size); - bool valid() const; - }; template @@ -388,7 +400,7 @@ Error FileStoreTemplate::resize(std::size_t size, void *newBuff) { } template -ValErr::StatInfo> FileStoreTemplate::stat(InodeId_t id) { +ValErr FileStoreTemplate::stat(InodeId_t id) { auto inode = find(id); if (inode.valid()) { return ValErr({ @@ -402,17 +414,17 @@ ValErr::StatInfo> FileStoreTemplate:: } template -InodeId_t FileStoreTemplate::spaceNeeded(FsSize_t size) { +typename FileStoreTemplate::InodeId_t FileStoreTemplate::spaceNeeded(FsSize_t size) { return m_buffer->spaceNeeded(size); } template -InodeId_t FileStoreTemplate::size() { +typename FileStoreTemplate::InodeId_t FileStoreTemplate::size() { return m_buffer->size(); } template -InodeId_t FileStoreTemplate::available() { +typename FileStoreTemplate::InodeId_t FileStoreTemplate::available() { return m_buffer->available(); } @@ -430,7 +442,7 @@ Error FileStoreTemplate::walk(Error(*cb)(uint8_t, uint64_t, uint64_t)) { } template -ValErr FileStoreTemplate::generateInodeId() { +ValErr::InodeId_t> FileStoreTemplate::generateInodeId() { auto fsData = fileStoreData(); if (fsData) { for (auto i = 0; i < 100; i++) { diff --git a/deps/ox/src/ox/fs/filesystem2/directory.cpp b/deps/ox/src/ox/fs/filesystem2/directory.cpp index 3281fea4..30fc4e8b 100644 --- a/deps/ox/src/ox/fs/filesystem2/directory.cpp +++ b/deps/ox/src/ox/fs/filesystem2/directory.cpp @@ -10,8 +10,8 @@ namespace ox::fs { -template class Directory; -template class Directory; +template class Directory; +template class Directory; template struct DirectoryEntry; template struct DirectoryEntry; diff --git a/deps/ox/src/ox/fs/filesystem2/directory.hpp b/deps/ox/src/ox/fs/filesystem2/directory.hpp index 9f9f16ad..fc88bcb4 100644 --- a/deps/ox/src/ox/fs/filesystem2/directory.hpp +++ b/deps/ox/src/ox/fs/filesystem2/directory.hpp @@ -9,7 +9,7 @@ #pragma once #include -#include +#include #include #include @@ -83,7 +83,7 @@ struct __attribute__((packed)) DirectoryEntry { }; -template +template class Directory { private: @@ -112,12 +112,12 @@ class Directory { Error remove(PathIterator it, FileName *nameBuff = nullptr) noexcept; - ValErr find(const FileName &name) const noexcept; + ValErr find(const FileName &name) const noexcept; }; -template -Directory::Directory(FileStore *fs, InodeId_t inodeId) { +template +Directory::Directory(FileStore *fs, InodeId_t inodeId) { m_fs = fs; m_inodeId = inodeId; auto buff = fs->read(inodeId).template to(); @@ -126,8 +126,8 @@ Directory::Directory(FileStore *fs, InodeId_t inodeId) { } } -template -Error Directory::init() noexcept { +template +Error Directory::init() noexcept { constexpr auto Size = sizeof(Buffer); oxReturnError(m_fs->write(m_inodeId, nullptr, Size)); auto buff = m_fs->read(m_inodeId); @@ -140,8 +140,8 @@ Error Directory::init() noexcept { return OxError(1); } -template -Error Directory::mkdir(PathIterator path, bool parents, FileName *nameBuff) { +template +Error Directory::mkdir(PathIterator path, bool parents, FileName *nameBuff) { if (path.valid()) { oxTrace("ox::fs::Directory::mkdir") << path.fullPath(); // reuse nameBuff if it has already been allocated, as it is a rather large variable @@ -164,7 +164,7 @@ Error Directory::mkdir(PathIterator path, bool parents, FileName *nam oxReturnError(childInode.error); // initialize the directory - Directory child(m_fs, childInode); + Directory child(m_fs, childInode); oxReturnError(child.init()); auto err = write(name->c_str(), childInode, false); @@ -176,7 +176,7 @@ Error Directory::mkdir(PathIterator path, bool parents, FileName *nam } } - Directory child(m_fs, childInode); + Directory child(m_fs, childInode); if (path.hasNext()) { oxReturnError(child.mkdir(path + 1, parents, nameBuff)); } @@ -184,8 +184,8 @@ Error Directory::mkdir(PathIterator path, bool parents, FileName *nam return OxError(0); } -template -Error Directory::write(PathIterator path, InodeId_t inode, bool parents, FileName *nameBuff) noexcept { +template +Error Directory::write(PathIterator path, InodeId_t inode, bool parents, FileName *nameBuff) noexcept { InodeId_t nextChild = 0; // reuse nameBuff if it has already been allocated, as it is a rather large variable @@ -254,8 +254,8 @@ Error Directory::write(PathIterator path, InodeId_t inode, bool paren return OxError(1); } -template -Error Directory::remove(PathIterator path, FileName *nameBuff) noexcept { +template +Error Directory::remove(PathIterator path, FileName *nameBuff) noexcept { // reuse nameBuff if it has already been allocated, as it is a rather large variable if (nameBuff == nullptr) { nameBuff = reinterpret_cast(ox_alloca(sizeof(FileName))); @@ -284,8 +284,8 @@ Error Directory::remove(PathIterator path, FileName *nameBuff) noexce return OxError(0); } -template -ValErr Directory::find(const FileName &name) const noexcept { +template +ValErr Directory::find(const FileName &name) const noexcept { oxTrace("ox::fs::Directory::find") << name.c_str(); auto buff = m_fs->read(m_inodeId).template to(); if (buff.valid()) { @@ -308,13 +308,13 @@ ValErr Directory::find(const FileName &name) const } -extern template class Directory; -extern template class Directory; +extern template class Directory; +extern template class Directory; extern template struct DirectoryEntry; extern template struct DirectoryEntry; -using Directory16 = Directory; -using Directory32 = Directory; +using Directory16 = Directory; +using Directory32 = Directory; } diff --git a/deps/ox/src/ox/fs/filesystem2/filesystem.cpp b/deps/ox/src/ox/fs/filesystem2/filesystem.cpp index 3d52a283..a90a6f51 100644 --- a/deps/ox/src/ox/fs/filesystem2/filesystem.cpp +++ b/deps/ox/src/ox/fs/filesystem2/filesystem.cpp @@ -10,10 +10,7 @@ namespace ox::fs { -template class Directory; -template class Directory; - -template class FileSystemTemplate>; -template class FileSystemTemplate>; +template class FileSystemTemplate; +template class FileSystemTemplate; } diff --git a/deps/ox/src/ox/fs/filesystem2/filesystem.hpp b/deps/ox/src/ox/fs/filesystem2/filesystem.hpp index 7cf6873e..33331271 100644 --- a/deps/ox/src/ox/fs/filesystem2/filesystem.hpp +++ b/deps/ox/src/ox/fs/filesystem2/filesystem.hpp @@ -15,19 +15,65 @@ namespace ox::fs { +class FileSystem { + + public: + virtual Error format() = 0; + + virtual Error mkdir(const char *path, bool recursive = false) = 0; + + /** + * Moves an entry from one directory to another. + * @param src the path to the file + * @param dest the path of the destination directory + */ + virtual Error move(const char *src, const char *dest) = 0; + + virtual Error read(const char *path, void *buffer, std::size_t buffSize) = 0; + + virtual Error read(uint64_t inode, void *buffer, std::size_t size) = 0; + + virtual Error read(uint64_t inode, std::size_t readStart, std::size_t readSize, void *buffer, std::size_t *size) = 0; + + virtual Error remove(const char *path, bool recursive = false) = 0; + + virtual void resize(uint64_t size, void *buffer = nullptr) = 0; + + virtual Error write(const char *path, void *buffer, uint64_t size, uint8_t fileType = FileType_NormalFile) = 0; + + virtual Error write(uint64_t inode, void *buffer, uint64_t size, uint8_t fileType = FileType_NormalFile) = 0; + + virtual ValErr stat(uint64_t inode) = 0; + + virtual ValErr stat(const char *path) = 0; + + virtual uint64_t spaceNeeded(uint64_t size) = 0; + + virtual uint64_t available() = 0; + + virtual uint64_t size() = 0; + + virtual uint8_t *buff() = 0; + + virtual Error walk(Error(*cb)(uint8_t, uint64_t, uint64_t)) = 0; + + virtual bool valid() const = 0; + +}; + /** * FileSystemTemplate used to create file system that wraps around a FileStore, * taking an inode size and a directory type as parameters. * * Note: Directory parameter must have a default constructor. */ -template -class FileSystemTemplate { +template +class FileSystemTemplate: public FileSystem { private: - static constexpr InodeId_t InodeFsData = 2; + static constexpr auto InodeFsData = 2; struct __attribute__((packed)) FileSystemData { - LittleEndian rootDirInode; + LittleEndian rootDirInode; }; FileStore *m_fs = nullptr; @@ -37,46 +83,41 @@ class FileSystemTemplate { ~FileSystemTemplate(); - Error format(); + Error format() override; - Error mkdir(const char *path, bool recursive = false); + Error mkdir(const char *path, bool recursive = false) override; - /** - * Moves an entry from one directory to another. - * @param src the path to the file - * @param dest the path of the destination directory - */ - Error move(const char *src, const char *dest); + Error move(const char *src, const char *dest) override; - Error read(const char *path, void *buffer, std::size_t buffSize); + Error read(const char *path, void *buffer, std::size_t buffSize) override; - Error read(uint64_t inode, void *buffer, std::size_t size); + Error read(uint64_t inode, void *buffer, std::size_t size) override; - Error read(uint64_t inode, std::size_t readStart, std::size_t readSize, void *buffer, std::size_t *size); + Error read(uint64_t inode, std::size_t readStart, std::size_t readSize, void *buffer, std::size_t *size) override; - Error remove(const char *path, bool recursive = false); + Error remove(const char *path, bool recursive = false) override; - void resize(uint64_t size, void *buffer = nullptr); + void resize(uint64_t size, void *buffer = nullptr) override; - Error write(const char *path, void *buffer, uint64_t size, uint8_t fileType = FileType_NormalFile); + Error write(const char *path, void *buffer, uint64_t size, uint8_t fileType = FileType_NormalFile) override; - Error write(uint64_t inode, void *buffer, uint64_t size, uint8_t fileType = FileType_NormalFile); + Error write(uint64_t inode, void *buffer, uint64_t size, uint8_t fileType = FileType_NormalFile) override; - ValErr stat(uint64_t inode); + ValErr stat(uint64_t inode) override; - ValErr stat(const char *path); + ValErr stat(const char *path) override; - uint64_t spaceNeeded(uint64_t size); + uint64_t spaceNeeded(uint64_t size) override; - uint64_t available(); + uint64_t available() override; - uint64_t size(); + uint64_t size() override; - uint8_t *buff(); + uint8_t *buff() override; - Error walk(Error(*cb)(uint8_t, uint64_t, uint64_t)); + Error walk(Error(*cb)(uint8_t, uint64_t, uint64_t)) override; - bool valid() const; + bool valid() const override; private: ValErr fileSystemData() const noexcept; @@ -90,20 +131,20 @@ class FileSystemTemplate { }; -template -FileSystemTemplate::FileSystemTemplate(FileStore *fs) { +template +FileSystemTemplate::FileSystemTemplate(FileStore *fs) { m_fs = fs; } -template -FileSystemTemplate::~FileSystemTemplate() { +template +FileSystemTemplate::~FileSystemTemplate() { } -template -Error FileSystemTemplate::format() { +template +Error FileSystemTemplate::format() { oxReturnError(m_fs->format()); - constexpr auto rootDirInode = MaxValue / 2; + constexpr auto rootDirInode = MaxValue / 2; Directory rootDir(m_fs, rootDirInode); oxReturnError(rootDir.init()); @@ -119,21 +160,16 @@ Error FileSystemTemplate::format() { return OxError(0); } -template -Error FileSystemTemplate::mkdir(const char *path, bool recursive) { - auto fd = fileSystemData(); - if (fd.ok()) { - oxTrace("ox::fs::FileSystemTemplate::mkdir") << "rootDirInode:" << fd.value.rootDirInode; - Directory rootDir(m_fs, fd.value.rootDirInode); - return rootDir.mkdir(path, recursive); - } else { - oxLogError(fd.error); - return fd.error; - } +template +Error FileSystemTemplate::mkdir(const char *path, bool recursive) { + oxTrace("ox::fs::FileSystemTemplate::mkdir") << "path:" << path << "recursive:" << recursive; + auto rootDir = this->rootDir(); + oxReturnError(rootDir.error); + return rootDir.value.mkdir(path, recursive); } -template -Error FileSystemTemplate::move(const char *src, const char *dest) { +template +Error FileSystemTemplate::move(const char *src, const char *dest) { auto fd = fileSystemData(); oxReturnError(fd.error); Directory rootDir(m_fs, fd.value.rootDirInode); @@ -144,8 +180,8 @@ Error FileSystemTemplate::move(const char *src, const char return OxError(0); } -template -Error FileSystemTemplate::read(const char *path, void *buffer, std::size_t buffSize) { +template +Error FileSystemTemplate::read(const char *path, void *buffer, std::size_t buffSize) { auto fd = fileSystemData(); oxReturnError(fd.error); Directory rootDir(m_fs, fd.value.rootDirInode); @@ -154,18 +190,18 @@ Error FileSystemTemplate::read(const char *path, void *buf return read(inode, buffer, buffSize); } -template -Error FileSystemTemplate::read(uint64_t inode, void *buffer, std::size_t buffSize) { +template +Error FileSystemTemplate::read(uint64_t inode, void *buffer, std::size_t buffSize) { return m_fs->read(inode, buffer, buffSize); } -template -Error FileSystemTemplate::read(uint64_t inode, std::size_t readStart, std::size_t readSize, void *buffer, std::size_t *size) { +template +Error FileSystemTemplate::read(uint64_t inode, std::size_t readStart, std::size_t readSize, void *buffer, std::size_t *size) { return m_fs->read(inode, readStart, readSize, buffer, size); } -template -Error FileSystemTemplate::remove(const char *path, bool recursive) { +template +Error FileSystemTemplate::remove(const char *path, bool recursive) { auto fd = fileSystemData(); oxReturnError(fd.error); Directory rootDir(m_fs, fd.value.rootDirInode); @@ -186,16 +222,16 @@ Error FileSystemTemplate::remove(const char *path, bool re return OxError(0); } -template -void FileSystemTemplate::resize(uint64_t size, void *buffer) { +template +void FileSystemTemplate::resize(uint64_t size, void *buffer) { m_fs->resize(size, buffer); } -template -Error FileSystemTemplate::write(const char *path, void *buffer, uint64_t size, uint8_t fileType) { +template +Error FileSystemTemplate::write(const char *path, void *buffer, uint64_t size, uint8_t fileType) { auto inode = find(path); if (inode.error) { - inode = m_fs->generateInodeId(); + inode.value = m_fs->generateInodeId(); } auto rootDir = this->rootDir(); oxReturnError(rootDir.error); @@ -204,13 +240,13 @@ Error FileSystemTemplate::write(const char *path, void *bu return 0; } -template -Error FileSystemTemplate::write(uint64_t inode, void *buffer, uint64_t size, uint8_t fileType) { +template +Error FileSystemTemplate::write(uint64_t inode, void *buffer, uint64_t size, uint8_t fileType) { return m_fs->write(inode, buffer, size, fileType); } -template -ValErr FileSystemTemplate::stat(uint64_t inode) { +template +ValErr FileSystemTemplate::stat(uint64_t inode) { auto s = m_fs->stat(inode); FileStat out; out.inode = s.value.inode; @@ -220,8 +256,8 @@ ValErr FileSystemTemplate::stat(uint64_t inode) return {out, s.error}; } -template -ValErr FileSystemTemplate::stat(const char *path) { +template +ValErr FileSystemTemplate::stat(const char *path) { auto inode = find(path); if (inode.error) { return {{}, inode.error}; @@ -229,33 +265,38 @@ ValErr FileSystemTemplate::stat(const char *path return stat(inode.value); } -template -uint64_t FileSystemTemplate::spaceNeeded(uint64_t size) { +template +uint64_t FileSystemTemplate::spaceNeeded(uint64_t size) { return m_fs->spaceNeeded(size); } -template -uint64_t FileSystemTemplate::available() { +template +uint64_t FileSystemTemplate::available() { return m_fs->available(); } -template -uint64_t FileSystemTemplate::size() { +template +uint64_t FileSystemTemplate::size() { return m_fs->size(); } -template -uint8_t *FileSystemTemplate::buff() { +template +uint8_t *FileSystemTemplate::buff() { return m_fs->buff(); } -template -Error FileSystemTemplate::walk(Error(*cb)(uint8_t, uint64_t, uint64_t)) { +template +Error FileSystemTemplate::walk(Error(*cb)(uint8_t, uint64_t, uint64_t)) { return m_fs->walk(cb); } -template -ValErr::FileSystemData> FileSystemTemplate::fileSystemData() const noexcept { +template +bool FileSystemTemplate::valid() const { + return m_fs && m_fs->valid(); +} + +template +ValErr::FileSystemData> FileSystemTemplate::fileSystemData() const noexcept { FileSystemData fd; auto err = m_fs->read(InodeFsData, &fd, sizeof(fd)); if (err != 0) { @@ -264,8 +305,8 @@ ValErr::FileSystemData> FileSy return fd; } -template -ValErr FileSystemTemplate::find(const char *path) const noexcept { +template +ValErr FileSystemTemplate::find(const char *path) const noexcept { auto fd = fileSystemData(); if (fd.error) { return {0, fd.error}; @@ -278,8 +319,8 @@ ValErr FileSystemTemplate::find(const char *path return inode.value; } -template -ValErr FileSystemTemplate::rootDir() const noexcept { +template +ValErr FileSystemTemplate::rootDir() const noexcept { auto fd = fileSystemData(); if (fd.error) { return {{}, fd.error}; @@ -287,13 +328,10 @@ ValErr FileSystemTemplate::rootDir() const noex return Directory(m_fs, fd.value.rootDirInode); } -extern template class Directory; -extern template class Directory; +extern template class FileSystemTemplate; +extern template class FileSystemTemplate; -extern template class FileSystemTemplate>; -extern template class FileSystemTemplate>; - -using FileSystem16 = FileSystemTemplate>; -using FileSystem32 = FileSystemTemplate>; +using FileSystem16 = FileSystemTemplate; +using FileSystem32 = FileSystemTemplate; } diff --git a/deps/ox/src/ox/fs/test/tests.cpp b/deps/ox/src/ox/fs/test/tests.cpp index ea10833d..6954f451 100644 --- a/deps/ox/src/ox/fs/test/tests.cpp +++ b/deps/ox/src/ox/fs/test/tests.cpp @@ -17,7 +17,6 @@ #include #include #include -#include #include #include