aboutsummaryrefslogtreecommitdiff
path: root/kernel/filesystem/src/inode.cpp
diff options
context:
space:
mode:
authorLukas Oesch <lukasoesch20@gmail.com>2026-03-15 20:37:14 +0100
committerLukas Oesch <lukasoesch20@gmail.com>2026-03-17 16:43:15 +0100
commit760752ef2045aaceb0393911a0919f9bc0104282 (patch)
treeecd7b04a9f21c9984bf6ada8b7e2b74bb43dc32d /kernel/filesystem/src/inode.cpp
parent6d8ae9c708d43ab3d98d6a1f2fbb4e5f74a4a2aa (diff)
downloadteachos-760752ef2045aaceb0393911a0919f9bc0104282.tar.xz
teachos-760752ef2045aaceb0393911a0919f9bc0104282.zip
implement first inode draft, fix make_device_node, implement first draft of resolve_path (currently with temp m_device_nodes in vfs -> has later to be deleted again, just for tests)
Diffstat (limited to 'kernel/filesystem/src/inode.cpp')
-rw-r--r--kernel/filesystem/src/inode.cpp56
1 files changed, 56 insertions, 0 deletions
diff --git a/kernel/filesystem/src/inode.cpp b/kernel/filesystem/src/inode.cpp
index 7bca507..a1427e2 100644
--- a/kernel/filesystem/src/inode.cpp
+++ b/kernel/filesystem/src/inode.cpp
@@ -2,18 +2,74 @@
#include "kapi/system.hpp"
+#include "devices/device.hpp"
+
#include <cstddef>
namespace filesystem
{
+ inode::inode(devices::device * device)
+ : m_device(device)
+ {
+ if (!m_device)
+ {
+ kapi::system::panic("[FILESYSTEM] inode constructed with null device.");
+ }
+ }
+
+ auto inode::is_device() const -> bool
+ {
+ return m_device != nullptr;
+ }
+
+ auto inode::is_block_device() const -> bool
+ {
+ return is_device() && m_device->is_block_device();
+ }
+
+ auto inode::major_device() const -> size_t
+ {
+ if (!is_device())
+ {
+ kapi::system::panic("[FILESYSTEM] inode::major_device called on non-device inode.");
+ }
+
+ return m_device->major();
+ }
+
+ auto inode::minor_device() const -> size_t
+ {
+ if (!is_device())
+ {
+ kapi::system::panic("[FILESYSTEM] inode::minor_device called on non-device inode.");
+ }
+
+ return m_device->minor();
+ }
+
+ auto inode::backing_device() const -> devices::device *
+ {
+ return m_device;
+ }
+
auto inode::read(void * /*buffer*/, size_t /*offset*/, size_t /*size*/) const -> size_t
{
+ if (is_device())
+ {
+ kapi::system::panic("[FILESYSTEM] inode::read called on device inode. Open it as a device file first.");
+ }
+
// TODO BA-FS26
return 0;
}
auto inode::write(void const *, size_t, size_t) -> size_t
{
+ if (is_device())
+ {
+ kapi::system::panic("[FILESYSTEM] inode::write called on device inode. Open it as a device file first.");
+ }
+
kapi::system::panic("[FILESYSTEM] inode::write is not implemented yet");
return 0;
}