aboutsummaryrefslogtreecommitdiff
path: root/kernel/include
diff options
context:
space:
mode:
authorLukas Oesch <lukasoesch20@gmail.com>2026-03-21 00:28:17 +0100
committerLukas Oesch <lukasoesch20@gmail.com>2026-03-26 21:17:33 +0100
commitba63fbfc2bb43a6f0f05b6b49fd51fd6c89a0861 (patch)
tree87f30fe5d929c170d4eecbdf2989773c821d537a /kernel/include
parent90452b752688110db2edc8d5dccdf0d6e0face5f (diff)
downloadteachos-ba63fbfc2bb43a6f0f05b6b49fd51fd6c89a0861.tar.xz
teachos-ba63fbfc2bb43a6f0f05b6b49fd51fd6c89a0861.zip
refactor file and inode architecture again
Diffstat (limited to 'kernel/include')
-rw-r--r--kernel/include/kernel/filesystem/device_file.hpp6
-rw-r--r--kernel/include/kernel/filesystem/device_inode.hpp7
-rw-r--r--kernel/include/kernel/filesystem/disk_file.hpp19
-rw-r--r--kernel/include/kernel/filesystem/ext2/ext2_file.hpp8
-rw-r--r--kernel/include/kernel/filesystem/ext2/ext2_inode.hpp9
-rw-r--r--kernel/include/kernel/filesystem/file.hpp8
-rw-r--r--kernel/include/kernel/filesystem/inode.hpp8
-rw-r--r--kernel/include/kernel/filesystem/inode_file.hpp9
8 files changed, 33 insertions, 41 deletions
diff --git a/kernel/include/kernel/filesystem/device_file.hpp b/kernel/include/kernel/filesystem/device_file.hpp
index ff803f8..22ddb49 100644
--- a/kernel/include/kernel/filesystem/device_file.hpp
+++ b/kernel/include/kernel/filesystem/device_file.hpp
@@ -11,9 +11,11 @@
namespace filesystem
{
+ struct inode;
+
struct device_file : file
{
- explicit device_file(kstd::shared_ptr<devices::device> const & device);
+ explicit device_file(kstd::shared_ptr<inode> const & inode);
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;
@@ -23,7 +25,7 @@ namespace filesystem
std::byte * scratch, void * buffer);
auto process_blocks(size_t offset, size_t size, void * buffer, block_op op) const -> size_t;
- kstd::shared_ptr<devices::device> m_device;
+ [[nodiscard]] auto device() const -> kstd::shared_ptr<devices::device> const &;
};
} // namespace filesystem
diff --git a/kernel/include/kernel/filesystem/device_inode.hpp b/kernel/include/kernel/filesystem/device_inode.hpp
index c38c75b..af2a51b 100644
--- a/kernel/include/kernel/filesystem/device_inode.hpp
+++ b/kernel/include/kernel/filesystem/device_inode.hpp
@@ -2,18 +2,21 @@
#define TEACH_OS_KERNEL_FILESYSTEM_DEVICE_INODE_HPP
#include "kernel/devices/device.hpp"
-#include "kernel/filesystem/file.hpp"
#include "kernel/filesystem/inode.hpp"
#include <kstd/memory>
namespace filesystem
{
+ struct file;
+
struct device_inode : inode
{
explicit device_inode(kstd::shared_ptr<devices::device> const & device);
- [[nodiscard]] auto open_file() const -> kstd::shared_ptr<file> override;
+ [[nodiscard]] auto open_file(kstd::shared_ptr<inode> const & self) const -> kstd::shared_ptr<file> override;
+
+ [[nodiscard]] auto device() const -> kstd::shared_ptr<devices::device> const &;
private:
kstd::shared_ptr<devices::device> m_device{};
diff --git a/kernel/include/kernel/filesystem/disk_file.hpp b/kernel/include/kernel/filesystem/disk_file.hpp
deleted file mode 100644
index c6a7655..0000000
--- a/kernel/include/kernel/filesystem/disk_file.hpp
+++ /dev/null
@@ -1,19 +0,0 @@
-#ifndef TEACH_OS_KERNEL_FILESYSTEM_DISK_FILE_HPP
-#define TEACH_OS_KERNEL_FILESYSTEM_DISK_FILE_HPP
-
-#include <kstd/memory>
-
-#include <cstddef>
-
-namespace filesystem
-{
- struct disk_file
- {
- virtual ~disk_file() = default;
-
- virtual auto read(void * buffer, size_t offset, size_t size) const -> size_t = 0;
- virtual auto write(void const * buffer, size_t offset, size_t size) -> size_t = 0;
- };
-} // namespace filesystem
-
-#endif \ No newline at end of file
diff --git a/kernel/include/kernel/filesystem/ext2/ext2_file.hpp b/kernel/include/kernel/filesystem/ext2/ext2_file.hpp
index 371507d..e5357e3 100644
--- a/kernel/include/kernel/filesystem/ext2/ext2_file.hpp
+++ b/kernel/include/kernel/filesystem/ext2/ext2_file.hpp
@@ -1,16 +1,14 @@
#ifndef TEACH_OS_KERNEL_FILESYSTEM_EXT2_FILE_HPP
#define TEACH_OS_KERNEL_FILESYSTEM_EXT2_FILE_HPP
-#include "kernel/filesystem/disk_file.hpp"
-
#include <cstddef>
namespace filesystem::ext2
{
- struct ext2_file : disk_file
+ struct ext2_file
{
- 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;
+ 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::ext2
diff --git a/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp b/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp
index 7b5ff3f..b57d267 100644
--- a/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp
+++ b/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp
@@ -1,7 +1,7 @@
#ifndef TEACH_OS_KERNEL_FILESYSTEM_EXT2_INODE_HPP
#define TEACH_OS_KERNEL_FILESYSTEM_EXT2_INODE_HPP
-#include "kernel/filesystem/disk_file.hpp"
+#include "kernel/filesystem/ext2/ext2_file.hpp"
#include "kernel/filesystem/file.hpp"
#include "kernel/filesystem/inode.hpp"
@@ -11,12 +11,13 @@ namespace filesystem::ext2
{
struct ext2_inode : inode
{
- explicit ext2_inode(kstd::shared_ptr<disk_file> const & disk_file);
+ explicit ext2_inode();
- [[nodiscard]] auto open_file() const -> kstd::shared_ptr<file> override;
+ [[nodiscard]] auto open_file(kstd::shared_ptr<inode> const & self) const
+ -> kstd::shared_ptr<filesystem::file> override;
private:
- kstd::shared_ptr<disk_file> m_disk_file{};
+ kstd::shared_ptr<ext2_file> m_file{};
};
} // namespace filesystem::ext2
diff --git a/kernel/include/kernel/filesystem/file.hpp b/kernel/include/kernel/filesystem/file.hpp
index 5a41fab..522f078 100644
--- a/kernel/include/kernel/filesystem/file.hpp
+++ b/kernel/include/kernel/filesystem/file.hpp
@@ -1,16 +1,24 @@
#ifndef TEACH_OS_KERNEL_FILESYSTEM_FILE_HPP
#define TEACH_OS_KERNEL_FILESYSTEM_FILE_HPP
+#include <kstd/memory>
+
#include <cstddef>
namespace filesystem
{
+ struct inode;
+
struct file
{
+ explicit file(kstd::shared_ptr<inode> const & inode);
virtual ~file() = default;
virtual auto read(void * buffer, size_t offset, size_t size) const -> size_t = 0;
virtual auto write(void const * buffer, size_t offset, size_t size) -> size_t = 0;
+
+ protected:
+ kstd::shared_ptr<inode> m_inode;
};
} // namespace filesystem
diff --git a/kernel/include/kernel/filesystem/inode.hpp b/kernel/include/kernel/filesystem/inode.hpp
index 79cbcf9..8c9f75e 100644
--- a/kernel/include/kernel/filesystem/inode.hpp
+++ b/kernel/include/kernel/filesystem/inode.hpp
@@ -1,12 +1,12 @@
#ifndef TEACH_OS_KERNEL_FILESYSTEM_INODE_HPP
#define TEACH_OS_KERNEL_FILESYSTEM_INODE_HPP
-#include "kernel/filesystem/file.hpp"
-
#include <kstd/memory>
namespace filesystem
{
+ struct file;
+
struct inode
{
enum class inode_kind
@@ -20,12 +20,12 @@ namespace filesystem
virtual ~inode() = default;
+ [[nodiscard]] virtual auto open_file(kstd::shared_ptr<inode> const & self) const -> kstd::shared_ptr<file> = 0;
+
[[nodiscard]] auto is_directory() const -> bool;
[[nodiscard]] auto is_regular() const -> bool;
[[nodiscard]] auto is_device() const -> bool;
- [[nodiscard]] virtual auto open_file() const -> kstd::shared_ptr<file> = 0;
-
private:
inode_kind m_kind{inode_kind::regular};
};
diff --git a/kernel/include/kernel/filesystem/inode_file.hpp b/kernel/include/kernel/filesystem/inode_file.hpp
index 3e2b954..f87b77c 100644
--- a/kernel/include/kernel/filesystem/inode_file.hpp
+++ b/kernel/include/kernel/filesystem/inode_file.hpp
@@ -1,8 +1,8 @@
#ifndef TEACH_OS_KERNEL_FILESYSTEM_INODE_FILE_HPP
#define TEACH_OS_KERNEL_FILESYSTEM_INODE_FILE_HPP
-#include "kernel/filesystem/disk_file.hpp"
#include "kernel/filesystem/file.hpp"
+#include "kernel/filesystem/inode.hpp"
#include <kstd/memory>
@@ -10,15 +10,14 @@
namespace filesystem
{
+ struct inode;
+
struct inode_file : file
{
- explicit inode_file(kstd::shared_ptr<disk_file> const & disk_file);
+ explicit inode_file(kstd::shared_ptr<inode> const & inode);
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:
- kstd::shared_ptr<disk_file> m_disk_file;
};
} // namespace filesystem