From 7c900eda103fbdd9bce1e379c0ea0c6ff9cf5940 Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Wed, 6 Jul 2016 00:50:22 -0500 Subject: [PATCH] Add file type field to inodes --- src/ox/fs/filestore.hpp | 13 +++++++------ src/ox/fs/filesystem.hpp | 13 +++++++++---- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/ox/fs/filestore.hpp b/src/ox/fs/filestore.hpp index bbfb76ab2..9897fc075 100644 --- a/src/ox/fs/filestore.hpp +++ b/src/ox/fs/filestore.hpp @@ -22,17 +22,17 @@ class FileStore { struct StatInfo { InodeId_t inodeId; FsSize_t size; + ox::std::uint8_t fileType; }; private: struct Inode { // the next Inode in memory FsSize_t prev, next; - - // The following variables should not be assumed to exist FsSize_t dataLen; InodeId_t m_id; ox::std::uint8_t refs; + ox::std::uint8_t fileType; FsSize_t left, right; FsSize_t size(); @@ -55,7 +55,7 @@ class FileStore { * @param data the contents of the file * @param dataLen the number of bytes data points to */ - int write(void *data, FsSize_t dataLen); + int write(void *data, FsSize_t dataLen, ox::std::uint8_t fileType = 0); /** * Writes the given data to a "file" with the given id. @@ -63,7 +63,7 @@ class FileStore { * @param data the contents of the file * @param dataLen the number of bytes data points to */ - int write(InodeId_t id, void *data, FsSize_t dataLen); + int write(InodeId_t id, void *data, FsSize_t dataLen, ox::std::uint8_t fileType = 0); /** * Removes the inode of the given ID. @@ -212,18 +212,19 @@ void *FileStore::Inode::data() { // FileStore template -int FileStore::write(void *data, FsSize_t dataLen) { +int FileStore::write(void *data, FsSize_t dataLen, ox::std::uint8_t fileType) { return 1; } template -int FileStore::write(InodeId_t id, void *data, FsSize_t dataLen) { +int FileStore::write(InodeId_t id, void *data, FsSize_t dataLen, ox::std::uint8_t fileType) { auto retval = 1; const FsSize_t size = sizeof(Inode) + dataLen; auto inode = (Inode*) alloc(size); if (inode) { remove(id); inode->m_id = id; + inode->fileType = fileType; inode->setData(data, dataLen); auto root = ptr(m_rootInode); if (insert(root, inode) || root == inode) { diff --git a/src/ox/fs/filesystem.hpp b/src/ox/fs/filesystem.hpp index d502fa37f..9ff65ae05 100644 --- a/src/ox/fs/filesystem.hpp +++ b/src/ox/fs/filesystem.hpp @@ -21,6 +21,11 @@ enum FsType { OxFS_64 = 3 }; +enum FileType { + NormalFile = 1, + Directory = 2 +}; + struct FileStat { uint64_t inode; uint64_t size; @@ -36,7 +41,7 @@ class FileSystem { virtual int remove(ox::std::uint64_t inode) = 0; - virtual int write(ox::std::uint64_t inode, void *buffer, ox::std::uint64_t size) = 0; + virtual int write(ox::std::uint64_t inode, void *buffer, ox::std::uint64_t size, ox::std::uint8_t fileType = NormalFile) = 0; virtual FileStat stat(ox::std::uint64_t inode) = 0; }; @@ -89,7 +94,7 @@ class FileSystemTemplate: public FileSystem { int remove(ox::std::uint64_t inode); - int write(ox::std::uint64_t inode, void *buffer, ox::std::uint64_t size) override; + int write(ox::std::uint64_t inode, void *buffer, ox::std::uint64_t size, ox::std::uint8_t fileType) override; FileStat stat(const char *path); @@ -156,8 +161,8 @@ int FileSystemTemplate::remove(ox::std::uint64_t inode) { } template -int FileSystemTemplate::write(ox::std::uint64_t inode, void *buffer, ox::std::uint64_t size) { - return store->write(inode, buffer, size); +int FileSystemTemplate::write(ox::std::uint64_t inode, void *buffer, ox::std::uint64_t size, ox::std::uint8_t fileType) { + return store->write(inode, buffer, size, fileType); } template