aboutsummaryrefslogtreecommitdiff
path: root/kernel/include
diff options
context:
space:
mode:
authorLukas Oesch <lukasoesch20@gmail.com>2026-04-28 10:49:34 +0200
committerLukas Oesch <lukasoesch20@gmail.com>2026-05-05 14:38:51 +0200
commitb3209ac2564f21f3b78ecf5e0c05ca346a4a4276 (patch)
tree25c859242bbe610ba8cdb132ed6776edafbe7049 /kernel/include
parent3082340fa8ab3c7c0da5d2f9d321d2367d399b20 (diff)
downloadkernel-b3209ac2564f21f3b78ecf5e0c05ca346a4a4276.tar.xz
kernel-b3209ac2564f21f3b78ecf5e0c05ca346a4a4276.zip
refactor inode kind
Diffstat (limited to 'kernel/include')
-rw-r--r--kernel/include/kernel/filesystem/devfs/inode.hpp10
-rw-r--r--kernel/include/kernel/filesystem/device_inode.hpp5
-rw-r--r--kernel/include/kernel/filesystem/ext2/inode.hpp21
-rw-r--r--kernel/include/kernel/filesystem/inode.hpp25
-rw-r--r--kernel/include/kernel/filesystem/open_file_table.hpp4
-rw-r--r--kernel/include/kernel/filesystem/rootfs/inode.hpp10
-rw-r--r--kernel/include/kernel/test_support/filesystem/inode.hpp4
7 files changed, 41 insertions, 38 deletions
diff --git a/kernel/include/kernel/filesystem/devfs/inode.hpp b/kernel/include/kernel/filesystem/devfs/inode.hpp
index 0fab280..5589730 100644
--- a/kernel/include/kernel/filesystem/devfs/inode.hpp
+++ b/kernel/include/kernel/filesystem/devfs/inode.hpp
@@ -14,11 +14,6 @@ namespace kernel::filesystem::devfs
struct inode : kernel::filesystem::inode
{
/**
- @brief Create a devfs inode. The inode is initialized with the appropriate kind (directory).
- */
- inode();
-
- /**
@brief Reads from the devfs directory inode.
@param buffer Destination buffer.
@param offset Read offset in bytes.
@@ -35,6 +30,11 @@ namespace kernel::filesystem::devfs
@return Number of bytes written (always 0 because writes are not supported for this inode).
*/
auto write(void const * buffer, size_t offset, size_t size) -> size_t override;
+
+ /**
+ // % TODO BA-FS26
+ */
+ [[nodiscard]] auto is_directory() const -> bool override;
};
} // namespace kernel::filesystem::devfs
diff --git a/kernel/include/kernel/filesystem/device_inode.hpp b/kernel/include/kernel/filesystem/device_inode.hpp
index 2f79fca..fb60524 100644
--- a/kernel/include/kernel/filesystem/device_inode.hpp
+++ b/kernel/include/kernel/filesystem/device_inode.hpp
@@ -50,6 +50,11 @@ namespace kernel::filesystem
*/
[[nodiscard]] auto device() const -> kstd::shared_ptr<kapi::devices::device> const &;
+ /**
+ // TODO BA-FS26
+ */
+ [[nodiscard]] auto is_device() const -> bool override;
+
private:
kstd::shared_ptr<kapi::devices::device> m_device;
};
diff --git a/kernel/include/kernel/filesystem/ext2/inode.hpp b/kernel/include/kernel/filesystem/ext2/inode.hpp
index 9291eea..64cdb06 100644
--- a/kernel/include/kernel/filesystem/ext2/inode.hpp
+++ b/kernel/include/kernel/filesystem/ext2/inode.hpp
@@ -42,8 +42,10 @@ namespace kernel::filesystem::ext2
{
/**
@brief Create an ext2 inode associated with the given filesystem.
+ @param fs The ext2 filesystem that this inode belongs to.
+ @param data The data associated with this inode, read from the disk.
*/
- explicit inode(filesystem * fs);
+ explicit inode(filesystem * fs, inode_data const & data);
/**
@brief Reads from the ext2 inode into a @p buffer, starting at the specified @p offset and for a given @p size.
@@ -65,12 +67,23 @@ namespace kernel::filesystem::ext2
auto write(void const * buffer, size_t offset, size_t size) -> size_t override;
/**
- @brief The raw inode data as read from the disk.
- */
- inode_data m_data{};
+ // TODO BA-FS26
+ */
+ [[nodiscard]] auto data() const -> inode_data const &;
+
+ /**
+ // TODO BA-FS26
+ */
+ [[nodiscard]] auto is_directory() const -> bool override;
+
+ /**
+ // TODO BA-FS26
+ */
+ [[nodiscard]] auto is_regular() const -> bool override;
private:
filesystem * m_filesystem;
+ inode_data m_data{};
};
} // namespace kernel::filesystem::ext2
diff --git a/kernel/include/kernel/filesystem/inode.hpp b/kernel/include/kernel/filesystem/inode.hpp
index 5208be2..d071a6b 100644
--- a/kernel/include/kernel/filesystem/inode.hpp
+++ b/kernel/include/kernel/filesystem/inode.hpp
@@ -11,20 +11,9 @@ namespace kernel::filesystem
struct inode
{
/**
- @brief Represents the kind of an inode.
+ @brief Create an inode.
*/
- enum class inode_kind
- {
- regular,
- directory,
- device
- };
-
- /**
- @brief Create an inode with the given @p kind.
- @param kind The kind of the inode.
- */
- explicit inode(inode_kind kind);
+ inode() = default;
/**
@brief Virtual destructor for the inode.
@@ -55,23 +44,19 @@ namespace kernel::filesystem
@brief Returns whether the inode is a directory.
@return true if the inode is a directory, false otherwise.
*/
- [[nodiscard]] auto is_directory() const -> bool;
+ [[nodiscard]] virtual auto is_directory() const -> bool;
/**
@brief Returns whether the inode is a regular file.
@return true if the inode is a regular file, false otherwise.
*/
- [[nodiscard]] auto is_regular() const -> bool;
+ [[nodiscard]] virtual auto is_regular() const -> bool;
/**
@brief Returns whether the inode is a device.
@return true if the inode is a device, false otherwise.
*/
- [[nodiscard]] auto is_device() const -> bool;
-
- // TODO BA-FS26 avoid public member
- public:
- inode_kind m_kind{inode_kind::regular};
+ [[nodiscard]] virtual auto is_device() const -> bool;
};
} // namespace kernel::filesystem
diff --git a/kernel/include/kernel/filesystem/open_file_table.hpp b/kernel/include/kernel/filesystem/open_file_table.hpp
index 2f9a421..694f3b6 100644
--- a/kernel/include/kernel/filesystem/open_file_table.hpp
+++ b/kernel/include/kernel/filesystem/open_file_table.hpp
@@ -34,10 +34,10 @@ namespace kernel::filesystem
/**
@brief Add a file to the open file table.
- @param f The file descriptor to add.
+ @param fd The file descriptor to add.
@return The file descriptor index assigned to the file, or -1 on failure.
*/
- auto add_file(kstd::shared_ptr<open_file_descriptor> const & f) -> int;
+ auto add_file(kstd::shared_ptr<open_file_descriptor> const & fd) -> int;
/**
@brief Get a file from the open file table.
diff --git a/kernel/include/kernel/filesystem/rootfs/inode.hpp b/kernel/include/kernel/filesystem/rootfs/inode.hpp
index 37d0a30..e7c7eff 100644
--- a/kernel/include/kernel/filesystem/rootfs/inode.hpp
+++ b/kernel/include/kernel/filesystem/rootfs/inode.hpp
@@ -22,11 +22,6 @@ namespace kernel::filesystem::rootfs
struct inode : kernel::filesystem::inode
{
/**
- @brief Create a rootfs inode. The inode is initialized with the appropriate kind (directory).
- */
- inode();
-
- /**
@brief Reads from the rootfs directory inode.
@param buffer Destination buffer.
@param offset Read offset in bytes.
@@ -57,6 +52,11 @@ namespace kernel::filesystem::rootfs
*/
auto lookup_child(std::string_view name) -> kstd::shared_ptr<inode>;
+ /**
+ // TODO BA-FS26
+ */
+ [[nodiscard]] auto is_directory() const -> bool override;
+
private:
kstd::vector<std::pair<kstd::string, kstd::shared_ptr<inode>>> m_children;
};
diff --git a/kernel/include/kernel/test_support/filesystem/inode.hpp b/kernel/include/kernel/test_support/filesystem/inode.hpp
index 9d17917..8a76437 100644
--- a/kernel/include/kernel/test_support/filesystem/inode.hpp
+++ b/kernel/include/kernel/test_support/filesystem/inode.hpp
@@ -9,10 +9,10 @@ namespace kernel::tests::filesystem
{
struct inode : kernel::filesystem::inode
{
- 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;
+
+ [[nodiscard]] auto is_regular() const -> bool override;
};
} // namespace kernel::tests::filesystem