diff --git a/src/ox/fs/filesystem.cpp b/src/ox/fs/filesystem.cpp index bcac13e2f..a61ef4d14 100644 --- a/src/ox/fs/filesystem.cpp +++ b/src/ox/fs/filesystem.cpp @@ -29,5 +29,12 @@ FileSystem *createFileSystem(void *buff) { return fs; } +template<> +FsType FileSystemTemplate::FS_TYPE = OxFS_16; +template<> +FsType FileSystemTemplate::FS_TYPE = OxFS_32; +template<> +FsType FileSystemTemplate::FS_TYPE = OxFS_64; + } } diff --git a/src/ox/fs/filesystem.hpp b/src/ox/fs/filesystem.hpp index 73d76ad82..7b72489cf 100644 --- a/src/ox/fs/filesystem.hpp +++ b/src/ox/fs/filesystem.hpp @@ -27,8 +27,9 @@ enum FileType { }; struct FileStat { - uint64_t inode; - uint64_t size; + ox::std::uint64_t inode; + ox::std::uint64_t size; + ox::std::uint8_t fileType; }; class FileSystem { @@ -46,6 +47,8 @@ class FileSystem { virtual FileStat stat(ox::std::uint64_t inode) = 0; }; +FileSystem *createFileSystem(void *buff); + template class FileSystemTemplate: public FileSystem { @@ -79,6 +82,8 @@ class FileSystemTemplate: public FileSystem { // static members static typename FileStore::InodeId_t INODE_ROOT_DIR; + static FsType FS_TYPE; + FileStore *store = nullptr; public: @@ -128,6 +133,7 @@ FileStat FileSystemTemplate::stat(ox::std::uint64_t inode) { auto s = store->stat(inode); stat.size = s.size; stat.inode = s.inodeId; + stat.fileType = s.fileType; return stat; } @@ -167,12 +173,14 @@ int FileSystemTemplate::write(ox::std::uint64_t inode, void *buffer, template ox::std::uint8_t *FileSystemTemplate::format(void *buffer, typename FileStore::FsSize_t size, bool useDirectories) { - buffer = FileStore::format((ox::std::uint8_t*) buffer, size); + buffer = FileStore::format((ox::std::uint8_t*) buffer, size, FS_TYPE); + auto fs = createFileSystem(buffer); if (buffer && useDirectories) { char dirBuff[sizeof(Directory) + sizeof(DirectoryEntry) + 2]; auto *dir = (Directory*) dirBuff; dir->files(); + fs->write(INODE_ROOT_DIR, dirBuff, useDirectories); } return (ox::std::uint8_t*) buffer; @@ -182,7 +190,5 @@ typedef FileSystemTemplate FileSystem16; typedef FileSystemTemplate FileSystem32; typedef FileSystemTemplate FileSystem64; -FileSystem *createFileSystem(void *buff); - } }