diff options
| -rw-r--r-- | kernel/kernel/filesystem/devfs/filesystem.cpp | 7 | ||||
| -rw-r--r-- | kernel/kernel/filesystem/ext2/filesystem.cpp | 7 | ||||
| -rw-r--r-- | kernel/kernel/filesystem/vfs.cpp | 8 |
3 files changed, 20 insertions, 2 deletions
diff --git a/kernel/kernel/filesystem/devfs/filesystem.cpp b/kernel/kernel/filesystem/devfs/filesystem.cpp index 59a1ae9c..d91ee1e4 100644 --- a/kernel/kernel/filesystem/devfs/filesystem.cpp +++ b/kernel/kernel/filesystem/devfs/filesystem.cpp @@ -51,11 +51,16 @@ namespace kernel::filesystem::devfs auto filesystem::lookup(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name) const -> std::expected<kstd::shared_ptr<kernel::filesystem::inode>, kstd::error_code> { - if (!parent || !parent->is_directory()) + if (!parent) { return std::unexpected{vfs_errc::invalid_inode}; } + if (!parent->is_directory()) + { + return std::unexpected{vfs_errc::not_a_directory}; + } + if (parent.get() != m_root_inode.get()) { return std::unexpected{vfs_errc::invalid_inode}; diff --git a/kernel/kernel/filesystem/ext2/filesystem.cpp b/kernel/kernel/filesystem/ext2/filesystem.cpp index 78a8aead..7aa2bd2d 100644 --- a/kernel/kernel/filesystem/ext2/filesystem.cpp +++ b/kernel/kernel/filesystem/ext2/filesystem.cpp @@ -81,11 +81,16 @@ namespace kernel::filesystem::ext2 auto filesystem::lookup(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name) const -> std::expected<kstd::shared_ptr<kernel::filesystem::inode>, kstd::error_code> { - if (!parent || !parent->is_directory()) + if (!parent) { return std::unexpected{vfs_errc::invalid_inode}; } + if (!parent->is_directory()) + { + return std::unexpected{vfs_errc::not_a_directory}; + } + auto * ext2_parent = static_cast<inode *>(parent.get()); auto const & inode_data = ext2_parent->data(); kstd::vector<uint8_t> buffer(block_size()); diff --git a/kernel/kernel/filesystem/vfs.cpp b/kernel/kernel/filesystem/vfs.cpp index e0e79094..31b9e4d0 100644 --- a/kernel/kernel/filesystem/vfs.cpp +++ b/kernel/kernel/filesystem/vfs.cpp @@ -158,6 +158,14 @@ namespace kernel::filesystem { return std::unexpected{vfs_errc::mount_point_not_found}; } + else if (remove_result == mount_table::operation_result::cannot_be_unmounted) + { + return std::unexpected{vfs_errc::mount_busy}; + } + else if (remove_result == mount_table::operation_result::has_child_mounts) + { + return std::unexpected{vfs_errc::has_child_mounts}; + } return std::unexpected{vfs_errc::unmount_failed}; } |
