Add file system type to FileSystem::format
This commit is contained in:
@@ -29,5 +29,12 @@ FileSystem *createFileSystem(void *buff) {
|
|||||||
return fs;
|
return fs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<>
|
||||||
|
FsType FileSystemTemplate<FileStore16>::FS_TYPE = OxFS_16;
|
||||||
|
template<>
|
||||||
|
FsType FileSystemTemplate<FileStore32>::FS_TYPE = OxFS_32;
|
||||||
|
template<>
|
||||||
|
FsType FileSystemTemplate<FileStore64>::FS_TYPE = OxFS_64;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,8 +27,9 @@ enum FileType {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct FileStat {
|
struct FileStat {
|
||||||
uint64_t inode;
|
ox::std::uint64_t inode;
|
||||||
uint64_t size;
|
ox::std::uint64_t size;
|
||||||
|
ox::std::uint8_t fileType;
|
||||||
};
|
};
|
||||||
|
|
||||||
class FileSystem {
|
class FileSystem {
|
||||||
@@ -46,6 +47,8 @@ class FileSystem {
|
|||||||
virtual FileStat stat(ox::std::uint64_t inode) = 0;
|
virtual FileStat stat(ox::std::uint64_t inode) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
FileSystem *createFileSystem(void *buff);
|
||||||
|
|
||||||
template<typename FileStore>
|
template<typename FileStore>
|
||||||
class FileSystemTemplate: public FileSystem {
|
class FileSystemTemplate: public FileSystem {
|
||||||
|
|
||||||
@@ -79,6 +82,8 @@ class FileSystemTemplate: public FileSystem {
|
|||||||
// static members
|
// static members
|
||||||
static typename FileStore::InodeId_t INODE_ROOT_DIR;
|
static typename FileStore::InodeId_t INODE_ROOT_DIR;
|
||||||
|
|
||||||
|
static FsType FS_TYPE;
|
||||||
|
|
||||||
FileStore *store = nullptr;
|
FileStore *store = nullptr;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@@ -128,6 +133,7 @@ FileStat FileSystemTemplate<FileStore>::stat(ox::std::uint64_t inode) {
|
|||||||
auto s = store->stat(inode);
|
auto s = store->stat(inode);
|
||||||
stat.size = s.size;
|
stat.size = s.size;
|
||||||
stat.inode = s.inodeId;
|
stat.inode = s.inodeId;
|
||||||
|
stat.fileType = s.fileType;
|
||||||
return stat;
|
return stat;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -167,12 +173,14 @@ int FileSystemTemplate<FileStore>::write(ox::std::uint64_t inode, void *buffer,
|
|||||||
|
|
||||||
template<typename FileStore>
|
template<typename FileStore>
|
||||||
ox::std::uint8_t *FileSystemTemplate<FileStore>::format(void *buffer, typename FileStore::FsSize_t size, bool useDirectories) {
|
ox::std::uint8_t *FileSystemTemplate<FileStore>::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) {
|
if (buffer && useDirectories) {
|
||||||
char dirBuff[sizeof(Directory) + sizeof(DirectoryEntry) + 2];
|
char dirBuff[sizeof(Directory) + sizeof(DirectoryEntry) + 2];
|
||||||
auto *dir = (Directory*) dirBuff;
|
auto *dir = (Directory*) dirBuff;
|
||||||
dir->files();
|
dir->files();
|
||||||
|
fs->write(INODE_ROOT_DIR, dirBuff, useDirectories);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (ox::std::uint8_t*) buffer;
|
return (ox::std::uint8_t*) buffer;
|
||||||
@@ -182,7 +190,5 @@ typedef FileSystemTemplate<FileStore16> FileSystem16;
|
|||||||
typedef FileSystemTemplate<FileStore32> FileSystem32;
|
typedef FileSystemTemplate<FileStore32> FileSystem32;
|
||||||
typedef FileSystemTemplate<FileStore64> FileSystem64;
|
typedef FileSystemTemplate<FileStore64> FileSystem64;
|
||||||
|
|
||||||
FileSystem *createFileSystem(void *buff);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user