aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Oesch <lukasoesch20@gmail.com>2026-03-21 10:52:46 +0100
committerLukas Oesch <lukasoesch20@gmail.com>2026-03-26 21:17:36 +0100
commitffb2accb09a013d8da16acd824c846bc1acfd8e4 (patch)
treee9d8e2707a860a97458655d38f2cf561eda02897
parent09bf8eba8dbc76dc9c46ec1486cbf2f9530233a8 (diff)
downloadteachos-ffb2accb09a013d8da16acd824c846bc1acfd8e4.tar.xz
teachos-ffb2accb09a013d8da16acd824c846bc1acfd8e4.zip
use enable_shared_from_this instead of self invocation method
-rw-r--r--kernel/include/kernel/filesystem/device_inode.hpp4
-rw-r--r--kernel/include/kernel/filesystem/ext2/ext2_inode.hpp5
-rw-r--r--kernel/include/kernel/filesystem/inode.hpp4
-rw-r--r--kernel/src/filesystem/device_inode.cpp9
-rw-r--r--kernel/src/filesystem/ext2/ext2_inode.cpp11
-rw-r--r--kernel/src/filesystem/vfs.cpp2
6 files changed, 11 insertions, 24 deletions
diff --git a/kernel/include/kernel/filesystem/device_inode.hpp b/kernel/include/kernel/filesystem/device_inode.hpp
index af2a51b..10e40b3 100644
--- a/kernel/include/kernel/filesystem/device_inode.hpp
+++ b/kernel/include/kernel/filesystem/device_inode.hpp
@@ -14,12 +14,12 @@ namespace filesystem
{
explicit device_inode(kstd::shared_ptr<devices::device> const & device);
- [[nodiscard]] auto open_file(kstd::shared_ptr<inode> const & self) const -> kstd::shared_ptr<file> override;
+ [[nodiscard]] auto open_file() -> kstd::shared_ptr<file> override;
[[nodiscard]] auto device() const -> kstd::shared_ptr<devices::device> const &;
private:
- kstd::shared_ptr<devices::device> m_device{};
+ kstd::shared_ptr<devices::device> m_device;
};
} // namespace filesystem
diff --git a/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp b/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp
index b57d267..e6e8e99 100644
--- a/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp
+++ b/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp
@@ -13,11 +13,10 @@ namespace filesystem::ext2
{
explicit ext2_inode();
- [[nodiscard]] auto open_file(kstd::shared_ptr<inode> const & self) const
- -> kstd::shared_ptr<filesystem::file> override;
+ [[nodiscard]] auto open_file() -> kstd::shared_ptr<filesystem::file> override;
private:
- kstd::shared_ptr<ext2_file> m_file{};
+ kstd::shared_ptr<ext2_file> m_file;
};
} // namespace filesystem::ext2
diff --git a/kernel/include/kernel/filesystem/inode.hpp b/kernel/include/kernel/filesystem/inode.hpp
index 8c9f75e..1083d13 100644
--- a/kernel/include/kernel/filesystem/inode.hpp
+++ b/kernel/include/kernel/filesystem/inode.hpp
@@ -7,7 +7,7 @@ namespace filesystem
{
struct file;
- struct inode
+ struct inode : kstd::enable_shared_from_this<inode>
{
enum class inode_kind
{
@@ -20,7 +20,7 @@ namespace filesystem
virtual ~inode() = default;
- [[nodiscard]] virtual auto open_file(kstd::shared_ptr<inode> const & self) const -> kstd::shared_ptr<file> = 0;
+ [[nodiscard]] virtual auto open_file() -> kstd::shared_ptr<file> = 0;
[[nodiscard]] auto is_directory() const -> bool;
[[nodiscard]] auto is_regular() const -> bool;
diff --git a/kernel/src/filesystem/device_inode.cpp b/kernel/src/filesystem/device_inode.cpp
index 65dd9a3..b9ccd6d 100644
--- a/kernel/src/filesystem/device_inode.cpp
+++ b/kernel/src/filesystem/device_inode.cpp
@@ -21,14 +21,9 @@ namespace filesystem
}
}
- auto device_inode::open_file(kstd::shared_ptr<inode> const & self) const -> kstd::shared_ptr<file>
+ auto device_inode::open_file() -> kstd::shared_ptr<file>
{
- if (!self)
- {
- kapi::system::panic("[FILESYSTEM] device_inode::open_file called with null inode.");
- }
-
- return kstd::make_shared<device_file>(self);
+ return kstd::make_shared<device_file>(shared_from_this());
}
auto device_inode::device() const -> kstd::shared_ptr<devices::device> const &
diff --git a/kernel/src/filesystem/ext2/ext2_inode.cpp b/kernel/src/filesystem/ext2/ext2_inode.cpp
index 0a1994b..0760cb1 100644
--- a/kernel/src/filesystem/ext2/ext2_inode.cpp
+++ b/kernel/src/filesystem/ext2/ext2_inode.cpp
@@ -1,7 +1,5 @@
#include "kernel/filesystem/ext2/ext2_inode.hpp"
-#include "kapi/system.hpp"
-
#include "kernel/filesystem/file.hpp"
#include "kernel/filesystem/inode.hpp"
#include "kernel/filesystem/inode_file.hpp"
@@ -14,13 +12,8 @@ namespace filesystem::ext2
: inode(inode_kind::regular)
{}
- auto ext2_inode::open_file(kstd::shared_ptr<inode> const & self) const -> kstd::shared_ptr<filesystem::file>
+ auto ext2_inode::open_file() -> kstd::shared_ptr<filesystem::file>
{
- if (!self)
- {
- kapi::system::panic("[FILESYSTEM] ext2_inode::open_file called with null inode.");
- }
-
- return kstd::make_shared<inode_file>(self);
+ return kstd::make_shared<inode_file>(shared_from_this());
}
} // namespace filesystem::ext2 \ No newline at end of file
diff --git a/kernel/src/filesystem/vfs.cpp b/kernel/src/filesystem/vfs.cpp
index 5330b82..2316de0 100644
--- a/kernel/src/filesystem/vfs.cpp
+++ b/kernel/src/filesystem/vfs.cpp
@@ -70,7 +70,7 @@ namespace filesystem
{
auto node = custody->get_inode();
- if (auto opened_file = node->open_file(node))
+ if (auto opened_file = node->open_file())
{
return kstd::make_shared<open_file_description>(opened_file);
}