aboutsummaryrefslogtreecommitdiff
path: root/kernel/src/filesystem
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/src/filesystem')
-rw-r--r--kernel/src/filesystem/ext2/filesystem.cpp12
-rw-r--r--kernel/src/filesystem/ext2/inode.cpp2
-rw-r--r--kernel/src/filesystem/filesystem.cpp3
-rw-r--r--kernel/src/filesystem/mount.cpp2
-rw-r--r--kernel/src/filesystem/mount_table.cpp2
-rw-r--r--kernel/src/filesystem/vfs.cpp19
6 files changed, 24 insertions, 16 deletions
diff --git a/kernel/src/filesystem/ext2/filesystem.cpp b/kernel/src/filesystem/ext2/filesystem.cpp
index d7c989c..7ee1072 100644
--- a/kernel/src/filesystem/ext2/filesystem.cpp
+++ b/kernel/src/filesystem/ext2/filesystem.cpp
@@ -36,6 +36,10 @@ namespace kernel::filesystem::ext2
constexpr uint16_t S_IFREG = 0x8000;
constexpr uint16_t S_IFDIR = 0x4000;
+ // Error codes
+ constexpr int INVALID_MAGIC_NUMBER = -1;
+ constexpr int INVALID_ROOT_INODE = -2;
+
auto S_ISREG(uint16_t mode) -> bool
{
return (mode & S_IFMT) == S_IFREG;
@@ -55,7 +59,7 @@ namespace kernel::filesystem::ext2
if (m_superblock.magic != MAGIC_NUMBER)
{
- return -1;
+ return INVALID_MAGIC_NUMBER;
}
auto const block_size = get_block_size();
@@ -70,7 +74,11 @@ namespace kernel::filesystem::ext2
num_block_groups * sizeof(block_group_descriptor));
m_root_inode = read_inode(ROOT_INODE_NUMBER);
- // TODO BA-FS26 check if root inode is valid and is a directory ??
+
+ if (!m_root_inode || !m_root_inode->is_directory())
+ {
+ return INVALID_ROOT_INODE;
+ }
return 0;
}
diff --git a/kernel/src/filesystem/ext2/inode.cpp b/kernel/src/filesystem/ext2/inode.cpp
index 7f4cf69..a29bb3b 100644
--- a/kernel/src/filesystem/ext2/inode.cpp
+++ b/kernel/src/filesystem/ext2/inode.cpp
@@ -53,7 +53,7 @@ namespace kernel::filesystem::ext2
auto inode::write(void const * /*buffer*/, size_t /*offset*/, size_t /*size*/) -> size_t
{
- // TODO BA-FS26 implement
+ kapi::system::panic("[EXT2] inode::write is not implemented yet");
return 0;
}
} // namespace kernel::filesystem::ext2 \ No newline at end of file
diff --git a/kernel/src/filesystem/filesystem.cpp b/kernel/src/filesystem/filesystem.cpp
index 26c57b6..b08b520 100644
--- a/kernel/src/filesystem/filesystem.cpp
+++ b/kernel/src/filesystem/filesystem.cpp
@@ -36,11 +36,12 @@ namespace kernel::filesystem
}
}
- kapi::system::panic("[FILESYSTEM] cannot mount filesystem: no suitable filesystem found on device.");
+ return nullptr;
}
auto filesystem::mount(kstd::shared_ptr<kapi::devices::device> const & device) -> int
{
+ // TODO BA-FS26 maybe check if device is null and panic here already?
m_device = device;
return 0;
}
diff --git a/kernel/src/filesystem/mount.cpp b/kernel/src/filesystem/mount.cpp
index f9e709c..a6d2f7e 100644
--- a/kernel/src/filesystem/mount.cpp
+++ b/kernel/src/filesystem/mount.cpp
@@ -25,7 +25,7 @@ namespace kernel::filesystem
}
}
- auto mount::get_mount_dentry() const -> kstd::shared_ptr<dentry>
+ auto mount::get_mount_dentry() const -> kstd::shared_ptr<dentry> const &
{
return m_mount_dentry;
}
diff --git a/kernel/src/filesystem/mount_table.cpp b/kernel/src/filesystem/mount_table.cpp
index 737434e..195f48a 100644
--- a/kernel/src/filesystem/mount_table.cpp
+++ b/kernel/src/filesystem/mount_table.cpp
@@ -9,7 +9,7 @@
namespace kernel::filesystem
{
- void mount_table::add_mount(kstd::shared_ptr<mount> mount)
+ void mount_table::add_mount(kstd::shared_ptr<mount> const & mount)
{
m_mounts.push_back(mount);
}
diff --git a/kernel/src/filesystem/vfs.cpp b/kernel/src/filesystem/vfs.cpp
index f9a051a..2578036 100644
--- a/kernel/src/filesystem/vfs.cpp
+++ b/kernel/src/filesystem/vfs.cpp
@@ -21,6 +21,11 @@ namespace kernel::filesystem
namespace
{
constinit auto static active_vfs = std::optional<vfs>{};
+
+ // Error codes
+ constexpr int INVALID_PATH = -1;
+ constexpr int MOUNT_POINT_NOT_FOUND = -2;
+ constexpr int FILESYSTEM_NULL = -3;
} // namespace
auto vfs::init() -> void
@@ -79,18 +84,12 @@ namespace kernel::filesystem
{
if (!filesystem)
{
- return -1; // TODO BA-FS26 panic or errorcode?
- }
-
- if (path.empty() || path.front() != '/')
- {
- return -1; // TODO BA-FS26 panic or errorcode?
+ return FILESYSTEM_NULL;
}
- // TODO BA-FS26 better path validation
- if ((path.size() > 1 && path.back() == '/'))
+ if (path.empty() || path.front() != '/' || (path.size() > 1 && path.back() == '/'))
{
- return -1; // TODO BA-FS26 panic or errorcode?
+ return INVALID_PATH;
}
if (auto mount_point_dentry = resolve_path(path))
@@ -99,7 +98,7 @@ namespace kernel::filesystem
return 0;
}
- return -1;
+ return MOUNT_POINT_NOT_FOUND;
}
auto vfs::do_mount_internal(std::string_view path, kstd::shared_ptr<dentry> const & mount_point_dentry,