diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/filesystem/CMakeLists.txt | 10 | ||||
| -rw-r--r-- | kernel/filesystem/include/filesystem/inode.hpp | 14 | ||||
| -rw-r--r-- | kernel/filesystem/include/filesystem/inode_file.hpp | 25 | ||||
| -rw-r--r-- | kernel/filesystem/src/inode.cpp | 20 | ||||
| -rw-r--r-- | kernel/filesystem/src/inode_file.cpp | 33 |
5 files changed, 99 insertions, 3 deletions
diff --git a/kernel/filesystem/CMakeLists.txt b/kernel/filesystem/CMakeLists.txt index a5a964f..126b54e 100644 --- a/kernel/filesystem/CMakeLists.txt +++ b/kernel/filesystem/CMakeLists.txt @@ -3,18 +3,22 @@ add_library("kernel::filesystem" ALIAS "kernel_filesystem") target_sources("kernel_filesystem" PRIVATE "src/device_file.cpp" - "src/open_file_description.cpp" "src/file_descriptor_table.cpp" + "src/inode_file.cpp" + "src/inode.cpp" + "src/open_file_description.cpp" ) target_sources("kernel_filesystem" PUBLIC FILE_SET HEADERS BASE_DIRS "include" FILES - "include/filesystem/file.hpp" "include/filesystem/device_file.hpp" - "include/filesystem/open_file_description.hpp" "include/filesystem/file_descriptor_table.hpp" + "include/filesystem/file.hpp" + "include/filesystem/inode_file.hpp" + "include/filesystem/inode.hpp" + "include/filesystem/open_file_description.hpp" ) target_include_directories("kernel_filesystem" PUBLIC diff --git a/kernel/filesystem/include/filesystem/inode.hpp b/kernel/filesystem/include/filesystem/inode.hpp new file mode 100644 index 0000000..44ec09a --- /dev/null +++ b/kernel/filesystem/include/filesystem/inode.hpp @@ -0,0 +1,14 @@ +#ifndef TEACH_OS_KERNEL_FILESYSTEM_INODE_HPP +#define TEACH_OS_KERNEL_FILESYSTEM_INODE_HPP + +#include <cstddef> +namespace filesystem +{ + struct inode + { + auto read(void * buffer, size_t offset, size_t size) const -> size_t; + auto write(void const * buffer, size_t offset, size_t size) -> size_t; + }; +} // namespace filesystem + +#endif diff --git a/kernel/filesystem/include/filesystem/inode_file.hpp b/kernel/filesystem/include/filesystem/inode_file.hpp new file mode 100644 index 0000000..c091280 --- /dev/null +++ b/kernel/filesystem/include/filesystem/inode_file.hpp @@ -0,0 +1,25 @@ +#ifndef TEACH_OS_KERNEL_FILESYSTEM_INODE_FILE_HPP +#define TEACH_OS_KERNEL_FILESYSTEM_INODE_FILE_HPP + +#include "filesystem/file.hpp" +#include "filesystem/inode.hpp" + +#include <cstddef> + +namespace filesystem +{ + struct inode_file : file + { + explicit inode_file(inode * inode); + + auto open() -> void override; + + auto read(void * buffer, size_t offset, size_t size) const -> size_t override; + auto write(void const * buffer, size_t offset, size_t size) -> size_t override; + + private: + inode * m_inode; + }; +} // namespace filesystem + +#endif
\ No newline at end of file diff --git a/kernel/filesystem/src/inode.cpp b/kernel/filesystem/src/inode.cpp new file mode 100644 index 0000000..7bca507 --- /dev/null +++ b/kernel/filesystem/src/inode.cpp @@ -0,0 +1,20 @@ +#include "filesystem/inode.hpp" + +#include "kapi/system.hpp" + +#include <cstddef> + +namespace filesystem +{ + auto inode::read(void * /*buffer*/, size_t /*offset*/, size_t /*size*/) const -> size_t + { + // TODO BA-FS26 + return 0; + } + + auto inode::write(void const *, size_t, size_t) -> size_t + { + kapi::system::panic("[FILESYSTEM] inode::write is not implemented yet"); + return 0; + } +} // namespace filesystem
\ No newline at end of file diff --git a/kernel/filesystem/src/inode_file.cpp b/kernel/filesystem/src/inode_file.cpp new file mode 100644 index 0000000..071661f --- /dev/null +++ b/kernel/filesystem/src/inode_file.cpp @@ -0,0 +1,33 @@ +#include "filesystem/inode_file.hpp" + +#include "kapi/system.hpp" + +#include "filesystem/inode.hpp" + +#include <cstddef> + +namespace filesystem +{ + inode_file::inode_file(inode * inode) + : m_inode(inode) + { + if (!m_inode) + { + kapi::system::panic("[FILESYSTEM] inode_file constructed with null inode"); + } + } + + auto inode_file::open() -> void + { + // Hook point for permission checks or lazy metadata loading. + } + + auto inode_file::read(void * buffer, size_t offset, size_t size) const -> size_t + { + return m_inode->read(buffer, offset, size); + } + auto inode_file::write(void const * buffer, size_t offset, size_t size) -> size_t + { + return m_inode->write(buffer, offset, size); + } +} // namespace filesystem
\ No newline at end of file |
