diff options
| -rw-r--r-- | kernel/kernel/filesystem/devfs/filesystem.cpp | 14 | ||||
| -rw-r--r-- | kernel/kernel/filesystem/devfs/filesystem.hpp | 14 | ||||
| -rw-r--r-- | kernel/kernel/filesystem/ext2/filesystem.hpp | 19 | ||||
| -rw-r--r-- | kernel/kernel/filesystem/filesystem.hpp | 15 | ||||
| -rw-r--r-- | kernel/kernel/filesystem/rootfs/filesystem.cpp | 15 | ||||
| -rw-r--r-- | kernel/kernel/filesystem/rootfs/filesystem.hpp | 12 |
6 files changed, 40 insertions, 49 deletions
diff --git a/kernel/kernel/filesystem/devfs/filesystem.cpp b/kernel/kernel/filesystem/devfs/filesystem.cpp index 60d174fe..cc42a5bd 100644 --- a/kernel/kernel/filesystem/devfs/filesystem.cpp +++ b/kernel/kernel/filesystem/devfs/filesystem.cpp @@ -29,7 +29,7 @@ namespace kernel::filesystem::devfs return "devfs"; } - [[nodiscard]] auto probe(kstd::shared_ptr<kernel::filesystem::inode> const & backing_inode) const noexcept + [[nodiscard]] auto probe(filesystem::inode_ptr const & backing_inode) const noexcept -> kstd::result<std::uint32_t> override { if (backing_inode) @@ -39,7 +39,7 @@ namespace kernel::filesystem::devfs return 0; } - [[nodiscard]] auto make_instance() const -> kstd::shared_ptr<kernel::filesystem::filesystem> override + [[nodiscard]] auto make_instance() const -> filesystem::filesystem_ptr override { return kstd::make_shared<filesystem>(); } @@ -48,7 +48,7 @@ namespace kernel::filesystem::devfs [[gnu::used]] constexpr auto registration = type_registration<type>{}; - auto filesystem::mount(kstd::shared_ptr<kernel::filesystem::inode> const &) -> kstd::result<mount_result> + auto filesystem::mount(inode_ptr const &) -> kstd::result<mount_result> { m_root_inode = kstd::make_shared<inode>(); @@ -64,8 +64,7 @@ namespace kernel::filesystem::devfs return mount_result{m_root_inode, nullptr}; } - auto filesystem::lookup(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name) const - -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>> + auto filesystem::lookup(inode_ptr const & parent, std::string_view name) const -> kstd::result<inode_ptr> { if (!parent) { @@ -91,9 +90,8 @@ namespace kernel::filesystem::devfs return kstd::failure(vfs_errc::no_such_file_or_directory); } - auto filesystem::create_inode(kstd::shared_ptr<kernel::filesystem::inode> const &, std::string_view, - kapi::filesystem::file_type, std::optional<kapi::filesystem::device_number>) - -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>> + auto filesystem::create_inode(inode_ptr const &, std::string_view, kapi::filesystem::file_type, + std::optional<kapi::filesystem::device_number>) -> kstd::result<inode_ptr> { return kstd::failure(vfs_errc::read_only_file_system); } diff --git a/kernel/kernel/filesystem/devfs/filesystem.hpp b/kernel/kernel/filesystem/devfs/filesystem.hpp index 875f3957..f176a367 100644 --- a/kernel/kernel/filesystem/devfs/filesystem.hpp +++ b/kernel/kernel/filesystem/devfs/filesystem.hpp @@ -30,24 +30,22 @@ namespace kernel::filesystem::devfs kstd::enable_shared_from_this<filesystem>, device_number_registry_observer { - auto mount(kstd::shared_ptr<kernel::filesystem::inode> const & backing_inode) - -> kstd::result<mount_result> override; + auto mount(inode_ptr const & backing_inode) -> kstd::result<mount_result> override; - [[nodiscard]] auto lookup(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name) const - -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>> override; + [[nodiscard]] auto lookup(inode_ptr const & parent, std::string_view name) const + -> kstd::result<inode_ptr> override; //! @copydoc kernel::filesystem::filesystem::create_inode //! @return Always returns an error, as creating new inodes is not supported in devfs. - [[nodiscard]] auto create_inode(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name, - kapi::filesystem::file_type type, + [[nodiscard]] auto create_inode(inode_ptr const & parent, std::string_view name, kapi::filesystem::file_type type, std::optional<kapi::filesystem::device_number> raw_device = std::nullopt) - -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>> override; + -> kstd::result<inode_ptr> override; private: auto on_device_numbered(device_number_registry::entry const & numbered) -> void override; auto on_device_unnumbered(device_number_registry::entry const & numbered) -> void override; - kstd::shared_ptr<kernel::filesystem::inode> m_root_inode{}; + inode_ptr m_root_inode{}; kstd::flat_map<kstd::string, kstd::shared_ptr<device_inode>> m_inodes{}; }; } // namespace kernel::filesystem::devfs diff --git a/kernel/kernel/filesystem/ext2/filesystem.hpp b/kernel/kernel/filesystem/ext2/filesystem.hpp index fd304c00..1f7fe8af 100644 --- a/kernel/kernel/filesystem/ext2/filesystem.hpp +++ b/kernel/kernel/filesystem/ext2/filesystem.hpp @@ -75,16 +75,14 @@ namespace kernel::filesystem::ext2 //! The Second Extended Filesystem (ext2) struct filesystem final : kernel::filesystem::filesystem { - auto mount(kstd::shared_ptr<kernel::filesystem::inode> const & backing_inode) - -> kstd::result<mount_result> override; + auto mount(inode_ptr const & backing_inode) -> kstd::result<mount_result> override; - [[nodiscard]] auto lookup(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name) const - -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>> override; + [[nodiscard]] auto lookup(inode_ptr const & parent, std::string_view name) const + -> kstd::result<inode_ptr> override; - [[nodiscard]] auto create_inode(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name, - kapi::filesystem::file_type type, + [[nodiscard]] auto create_inode(inode_ptr const & parent, std::string_view name, kapi::filesystem::file_type type, std::optional<kapi::filesystem::device_number> raw_device = std::nullopt) - -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>> override; + -> kstd::result<inode_ptr> override; //! Get the size of a block in the filesystem. //! @@ -158,7 +156,7 @@ namespace kernel::filesystem::ext2 //! Get the backing inode of the file system. //! //! @return A reference to the backing inode. - [[nodiscard]] auto backing_inode() const -> kstd::shared_ptr<kernel::filesystem::inode> const &; + [[nodiscard]] auto backing_inode() const -> inode_ptr const &; private: struct indirect_level @@ -172,8 +170,7 @@ namespace kernel::filesystem::ext2 auto allocate_inode() -> kstd::result<uint32_t>; auto add_directory_entry(inode * ext2_parent, std::string_view name, uint32_t child_inode_number, uint16_t mode) -> kstd::result<void>; - auto init_directory(kstd::shared_ptr<kernel::filesystem::ext2::inode> const & new_inode, - kernel::filesystem::ext2::inode * parent_inode) -> kstd::result<void>; + auto init_directory(kstd::shared_ptr<inode> const & new_inode, inode * parent_inode) -> kstd::result<void>; auto write_directory_entry_to_buffer(uint8_t * block_buffer, kstd::bytes offset, uint32_t child_inode_number, std::string_view name, uint8_t file_type) -> void; @@ -197,7 +194,7 @@ namespace kernel::filesystem::ext2 superblock m_superblock{}; kstd::vector<block_group_descriptor> m_block_group_descriptors; - kstd::shared_ptr<kernel::filesystem::inode> m_backing_inode; + inode_ptr m_backing_inode; }; } // namespace kernel::filesystem::ext2 diff --git a/kernel/kernel/filesystem/filesystem.hpp b/kernel/kernel/filesystem/filesystem.hpp index 83f9b54d..f1b39bd4 100644 --- a/kernel/kernel/filesystem/filesystem.hpp +++ b/kernel/kernel/filesystem/filesystem.hpp @@ -22,7 +22,10 @@ namespace kernel::filesystem //! Filesystem implementations must derive from this class. struct filesystem { - using mount_result = std::pair<kstd::shared_ptr<inode>, kstd::shared_ptr<void>>; + using filesystem_ptr = kstd::shared_ptr<filesystem>; + using driver_data_ptr = kstd::shared_ptr<void>; + using inode_ptr = kstd::shared_ptr<inode>; + using mount_result = std::pair<inode_ptr, driver_data_ptr>; //! Virtual destructor enabling polymorphic destruction. virtual ~filesystem() = default; @@ -31,7 +34,7 @@ namespace kernel::filesystem //! //! @param backing_inode The inode to probe and mount, if any. //! @return A pointer to the instantiated filesystem and the root of it on success, an error otherwise. - auto static probe(kstd::shared_ptr<inode> const & backing_inode) -> kstd::result<kstd::shared_ptr<filesystem>>; + auto static probe(inode_ptr const & backing_inode) -> kstd::result<filesystem_ptr>; //! Initializes the filesystem with the given inode. //! @@ -40,7 +43,7 @@ namespace kernel::filesystem //! //! @param backing_inode The inode to use as the backing inode for the filesystem. //! @return The root inode of the mounted filesystem on success, and error otherwise. - virtual auto mount(kstd::shared_ptr<inode> const & backing_inode) -> kstd::result<mount_result> = 0; + virtual auto mount(inode_ptr const & backing_inode) -> kstd::result<mount_result> = 0; //! Find a child inode below the given parent inode with the specified name. //! @@ -50,8 +53,8 @@ namespace kernel::filesystem //! @param parent The parent inode. //! @param name The name of the child inode to look up. //! @return A pointer to the requested child inode on success, an error otherwise. - [[nodiscard]] virtual auto lookup(kstd::shared_ptr<inode> const & parent, std::string_view name) const - -> kstd::result<kstd::shared_ptr<inode>> = 0; + [[nodiscard]] virtual auto lookup(inode_ptr const & parent, std::string_view name) const + -> kstd::result<inode_ptr> = 0; //! Create a new inode with the given name below a given parent inode. //! @@ -60,7 +63,7 @@ namespace kernel::filesystem //! @param type The file type of inode to be created. //! @param raw_device The device number the new inode should represent, if any. //! @return A pointer to the created inode on success, an error otherwise. - [[nodiscard]] virtual auto create_inode(kstd::shared_ptr<inode> const & parent, std::string_view name, + [[nodiscard]] virtual auto create_inode(inode_ptr const & parent, std::string_view name, kapi::filesystem::file_type type, std::optional<kapi::filesystem::device_number> raw_device = std::nullopt) -> kstd::result<kstd::shared_ptr<inode>> = 0; diff --git a/kernel/kernel/filesystem/rootfs/filesystem.cpp b/kernel/kernel/filesystem/rootfs/filesystem.cpp index 298e8c94..147d967a 100644 --- a/kernel/kernel/filesystem/rootfs/filesystem.cpp +++ b/kernel/kernel/filesystem/rootfs/filesystem.cpp @@ -2,7 +2,6 @@ #include <kernel/filesystem/error.hpp> #include <kernel/filesystem/filesystem.hpp> -#include <kernel/filesystem/inode.hpp> #include <kernel/filesystem/rootfs/inode.hpp> #include <kernel/filesystem/type.hpp> @@ -25,7 +24,7 @@ namespace kernel::filesystem::rootfs return "rootfs"; } - [[nodiscard]] auto probe(kstd::shared_ptr<kernel::filesystem::inode> const & backing_inode) const noexcept + [[nodiscard]] auto probe(filesystem::inode_ptr const & backing_inode) const noexcept -> kstd::result<std::uint32_t> override { if (backing_inode) @@ -36,7 +35,7 @@ namespace kernel::filesystem::rootfs return 0; } - [[nodiscard]] auto make_instance() const -> kstd::shared_ptr<kernel::filesystem::filesystem> override + [[nodiscard]] auto make_instance() const -> filesystem::filesystem_ptr override { return kstd::make_shared<filesystem>(); } @@ -45,21 +44,19 @@ namespace kernel::filesystem::rootfs [[gnu::used]] constexpr auto registration = type_registration<type>{}; - auto filesystem::mount(kstd::shared_ptr<kernel::filesystem::inode> const &) -> kstd::result<mount_result> + auto filesystem::mount(inode_ptr const &) -> kstd::result<mount_result> { auto root = kstd::make_shared<inode>(); return mount_result{root, nullptr}; } - auto filesystem::lookup(kstd::shared_ptr<kernel::filesystem::inode> const &, std::string_view) const - -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>> + auto filesystem::lookup(inode_ptr const &, std::string_view) const -> kstd::result<inode_ptr> { return kstd::failure(vfs_errc::no_such_file_or_directory); } - auto filesystem::create_inode(kstd::shared_ptr<kernel::filesystem::inode> const &, std::string_view, - kapi::filesystem::file_type, std::optional<kapi::filesystem::device_number>) - -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>> + auto filesystem::create_inode(inode_ptr const &, std::string_view, kapi::filesystem::file_type, + std::optional<kapi::filesystem::device_number>) -> kstd::result<inode_ptr> { return kstd::failure(vfs_errc::read_only_file_system); } diff --git a/kernel/kernel/filesystem/rootfs/filesystem.hpp b/kernel/kernel/filesystem/rootfs/filesystem.hpp index 9f609106..5a72ff42 100644 --- a/kernel/kernel/filesystem/rootfs/filesystem.hpp +++ b/kernel/kernel/filesystem/rootfs/filesystem.hpp @@ -25,20 +25,18 @@ namespace kernel::filesystem::rootfs struct filesystem : kernel::filesystem::filesystem { //! @copydoc kernel::filesystem::filesystem::mount - auto mount(kstd::shared_ptr<kernel::filesystem::inode> const & backing_inode) - -> kstd::result<mount_result> override; + auto mount(inode_ptr const & backing_inode) -> kstd::result<mount_result> override; //! @copydoc kernel::filesystem::filesystem::lookup. //! @return Always returns an error, as rootfs is always empty. - [[nodiscard]] auto lookup(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name) const - -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>> override; + [[nodiscard]] auto lookup(inode_ptr const & parent, std::string_view name) const + -> kstd::result<inode_ptr> override; //! @copydoc kernel::filesystem::filesystem::create_inode. //! @return Always returns an error, as creating new inodes is not supported in rootfs. - [[nodiscard]] auto create_inode(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name, - kapi::filesystem::file_type type, + [[nodiscard]] auto create_inode(inode_ptr const & parent, std::string_view name, kapi::filesystem::file_type type, std::optional<kapi::filesystem::device_number> raw_device = std::nullopt) - -> kstd::result<kstd::shared_ptr<kernel::filesystem::inode>> override; + -> kstd::result<inode_ptr> override; }; } // namespace kernel::filesystem::rootfs |
