diff options
| author | Lukas Oesch <lukasoesch20@gmail.com> | 2026-03-15 20:37:14 +0100 |
|---|---|---|
| committer | Lukas Oesch <lukasoesch20@gmail.com> | 2026-03-17 16:43:15 +0100 |
| commit | 760752ef2045aaceb0393911a0919f9bc0104282 (patch) | |
| tree | ecd7b04a9f21c9984bf6ada8b7e2b74bb43dc32d /kernel/filesystem/src/inode.cpp | |
| parent | 6d8ae9c708d43ab3d98d6a1f2fbb4e5f74a4a2aa (diff) | |
| download | teachos-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.cpp | 56 |
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; } |
