aboutsummaryrefslogtreecommitdiff
path: root/kernel/filesystem/src/inode.cpp
diff options
context:
space:
mode:
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;
}