aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/include/kernel/filesystem/constants.hpp1
-rw-r--r--kernel/include/kernel/filesystem/dentry.hpp6
-rw-r--r--kernel/include/kernel/filesystem/devfs/filesystem.hpp2
-rw-r--r--kernel/include/kernel/filesystem/ext2/filesystem.hpp34
-rw-r--r--kernel/include/kernel/filesystem/ext2/inode.hpp2
-rw-r--r--kernel/include/kernel/filesystem/filesystem.hpp3
-rw-r--r--kernel/include/kernel/filesystem/mount.hpp12
-rw-r--r--kernel/include/kernel/filesystem/open_file_descriptor.hpp2
-rw-r--r--kernel/include/kernel/filesystem/open_file_table.hpp9
-rw-r--r--kernel/include/kernel/filesystem/rootfs/filesystem.hpp2
-rw-r--r--kernel/include/kernel/filesystem/rootfs/inode.hpp1
-rw-r--r--kernel/include/kernel/filesystem/vfs.hpp6
-rw-r--r--kernel/include/kernel/test_support/filesystem/filesystem.hpp2
-rw-r--r--kernel/kapi/filesystem.cpp20
-rw-r--r--kernel/src/devices/block_device_utils.cpp2
-rw-r--r--kernel/src/filesystem/dentry.cpp6
-rw-r--r--kernel/src/filesystem/dentry.tests.cpp14
-rw-r--r--kernel/src/filesystem/devfs/filesystem.cpp10
-rw-r--r--kernel/src/filesystem/devfs/inode.cpp4
-rw-r--r--kernel/src/filesystem/ext2/filesystem.cpp60
-rw-r--r--kernel/src/filesystem/ext2/inode.cpp19
-rw-r--r--kernel/src/filesystem/ext2/inode.tests.cpp8
-rw-r--r--kernel/src/filesystem/mount.cpp12
-rw-r--r--kernel/src/filesystem/mount.tests.cpp18
-rw-r--r--kernel/src/filesystem/mount_table.cpp11
-rw-r--r--kernel/src/filesystem/open_file_descriptor.cpp2
-rw-r--r--kernel/src/filesystem/open_file_descriptor.tests.cpp24
-rw-r--r--kernel/src/filesystem/open_file_table.cpp31
-rw-r--r--kernel/src/filesystem/open_file_table.tests.cpp19
-rw-r--r--kernel/src/filesystem/rootfs/filesystem.cpp3
-rw-r--r--kernel/src/filesystem/rootfs/inode.cpp7
-rw-r--r--kernel/src/filesystem/vfs.cpp25
-rw-r--r--kernel/src/filesystem/vfs.tests.cpp30
-rw-r--r--kernel/src/test_support/filesystem/filesystem.cpp2
34 files changed, 196 insertions, 213 deletions
diff --git a/kernel/include/kernel/filesystem/constants.hpp b/kernel/include/kernel/filesystem/constants.hpp
index aff512a..8388d05 100644
--- a/kernel/include/kernel/filesystem/constants.hpp
+++ b/kernel/include/kernel/filesystem/constants.hpp
@@ -2,6 +2,7 @@
#define TEACH_OS_KERNEL_FILESYSTEM_CONSTANTS_HPP
#include <cstddef>
+
namespace kernel::filesystem::constants
{
constexpr size_t inline max_path_length = 4096;
diff --git a/kernel/include/kernel/filesystem/dentry.hpp b/kernel/include/kernel/filesystem/dentry.hpp
index 925768a..478596a 100644
--- a/kernel/include/kernel/filesystem/dentry.hpp
+++ b/kernel/include/kernel/filesystem/dentry.hpp
@@ -46,19 +46,19 @@ namespace kernel::filesystem
@brief Get the parent dentry.
@return A reference to the parent dentry.
*/
- [[nodiscard]] auto get_parent() const -> kstd::shared_ptr<dentry> const &;
+ [[nodiscard]] auto parent() const -> kstd::shared_ptr<dentry> const &;
/**
@brief Get the name of the dentry.
@return The name of the dentry.
*/
- [[nodiscard]] auto get_name() const -> std::string_view;
+ [[nodiscard]] auto name() const -> std::string_view;
/**
@brief Get the full path of the dentry by traversing up to the root.
@return The full path of the dentry.
*/
- [[nodiscard]] auto get_absolute_path() const -> kstd::string;
+ [[nodiscard]] auto absolute_path() const -> kstd::string;
/**
@brief Add a @p child dentry.
diff --git a/kernel/include/kernel/filesystem/devfs/filesystem.hpp b/kernel/include/kernel/filesystem/devfs/filesystem.hpp
index 8d96555..dbaa387 100644
--- a/kernel/include/kernel/filesystem/devfs/filesystem.hpp
+++ b/kernel/include/kernel/filesystem/devfs/filesystem.hpp
@@ -33,7 +33,7 @@ namespace kernel::filesystem::devfs
@param name The name of the inode to look up.
@return A pointer to the found inode, or a null pointer if not found.
*/
- auto lookup(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name)
+ [[nodiscard]] auto lookup(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name) const
-> kstd::shared_ptr<kernel::filesystem::inode> override;
private:
diff --git a/kernel/include/kernel/filesystem/ext2/filesystem.hpp b/kernel/include/kernel/filesystem/ext2/filesystem.hpp
index 46be32f..45cd6a1 100644
--- a/kernel/include/kernel/filesystem/ext2/filesystem.hpp
+++ b/kernel/include/kernel/filesystem/ext2/filesystem.hpp
@@ -15,6 +15,8 @@
#include <string_view>
#include <unistd.h>
+#include <sys/types.h>
+
namespace kernel::filesystem::ext2
{
/**
@@ -61,20 +63,20 @@ namespace kernel::filesystem::ext2
@param name The name of the inode to look up.
@return A pointer to the found inode, or a null pointer if not found.
*/
- auto lookup(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name)
+ [[nodiscard]] auto lookup(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name) const
-> kstd::shared_ptr<kernel::filesystem::inode> override;
/**
@brief Gets the size of a block in the filesystem.
@return The size of a block in bytes.
*/
- [[nodiscard]] auto get_block_size() const -> size_t;
+ [[nodiscard]] auto block_size() const -> size_t;
/**
@brief Gets the revision level of the filesystem.
@return The revision level.
*/
- [[nodiscard]] auto get_revision_level() const -> size_t;
+ [[nodiscard]] auto revision_level() const -> uint32_t;
/**
@brief Maps an inode block index to a global block number.
@@ -82,30 +84,28 @@ namespace kernel::filesystem::ext2
@param data The inode data.
@return The global block number.
*/
- [[nodiscard]] auto map_inode_block_index_to_global_block_number(uint32_t inode_block_index, inode_data data) const
+ [[nodiscard]] auto map_inode_block_index_to_global_block_number(size_t inode_block_index, inode_data data) const
-> ssize_t;
private:
[[nodiscard]] auto read_inode(uint32_t inode_number) const -> kstd::shared_ptr<kernel::filesystem::ext2::inode>;
- [[nodiscard]] auto read_block_number_at_index(uint32_t block_number, uint32_t index) const -> uint32_t;
+ [[nodiscard]] auto read_block_number_at_index(uint32_t block_number, size_t index) const -> uint32_t;
[[nodiscard]] auto read_singly_indirect_block_number(uint32_t singly_indirect_block_number,
- uint32_t block_index_in_singly_indirect_block) const
- -> uint32_t;
+ size_t block_index_in_singly_indirect_block) const -> size_t;
[[nodiscard]] auto read_doubly_indirect_block_number(uint32_t doubly_indirect_block_number,
- uint32_t block_index_in_doubly_indirect_block) const
- -> uint32_t;
+ size_t block_index_in_doubly_indirect_block) const -> size_t;
[[nodiscard]] auto read_triply_indirect_block_number(uint32_t triply_indirect_block_number,
- uint32_t block_index_in_triply_indirect_block) const
- -> uint32_t;
+ size_t block_index_in_triply_indirect_block) const -> size_t;
- [[nodiscard]] auto get_inode_size() const -> size_t;
- [[nodiscard]] auto get_inode_block_count(inode_data const & data) const -> uint32_t;
+ [[nodiscard]] auto inode_size() const -> uint16_t;
+ [[nodiscard]] auto inode_block_count(inode_data const & data) const -> uint32_t;
+ [[nodiscard]] auto block_group_descriptor_table_offset() const -> size_t;
- [[nodiscard]] auto block_numbers_per_block() const -> uint32_t;
- [[nodiscard]] auto block_numbers_per_singly_indirect_block() const -> uint32_t;
- [[nodiscard]] auto block_numbers_per_doubly_indirect_block() const -> uint32_t;
- [[nodiscard]] auto block_numbers_per_triply_indirect_block() const -> uint32_t;
+ [[nodiscard]] auto block_numbers_per_block() const -> size_t;
+ [[nodiscard]] auto block_numbers_per_singly_indirect_block() const -> size_t;
+ [[nodiscard]] auto block_numbers_per_doubly_indirect_block() const -> size_t;
+ [[nodiscard]] auto block_numbers_per_triply_indirect_block() const -> size_t;
superblock m_superblock{};
kstd::vector<block_group_descriptor> m_block_group_descriptors;
diff --git a/kernel/include/kernel/filesystem/ext2/inode.hpp b/kernel/include/kernel/filesystem/ext2/inode.hpp
index 000a5d8..f2496f0 100644
--- a/kernel/include/kernel/filesystem/ext2/inode.hpp
+++ b/kernel/include/kernel/filesystem/ext2/inode.hpp
@@ -94,7 +94,7 @@ namespace kernel::filesystem::ext2
@brief Get the size of the file represented by this inode.
@return The size of the file in bytes.
*/
- [[nodiscard]] auto get_size() const -> size_t;
+ [[nodiscard]] auto size() const -> uint64_t;
private:
filesystem const * m_filesystem;
diff --git a/kernel/include/kernel/filesystem/filesystem.hpp b/kernel/include/kernel/filesystem/filesystem.hpp
index 2fdc0ed..bec1b16 100644
--- a/kernel/include/kernel/filesystem/filesystem.hpp
+++ b/kernel/include/kernel/filesystem/filesystem.hpp
@@ -56,7 +56,8 @@ namespace kernel::filesystem
@param name The name of the child inode to look up.
@return A pointer to the requested child inode, or a null pointer if not found.
*/
- virtual auto lookup(kstd::shared_ptr<inode> const & parent, std::string_view name) -> kstd::shared_ptr<inode> = 0;
+ [[nodiscard]] virtual auto lookup(kstd::shared_ptr<inode> const & parent, std::string_view name) const
+ -> kstd::shared_ptr<inode> = 0;
/**
@brief Returns a reference to the root inode of the filesystem.
diff --git a/kernel/include/kernel/filesystem/mount.hpp b/kernel/include/kernel/filesystem/mount.hpp
index 5d8ea69..4ce374f 100644
--- a/kernel/include/kernel/filesystem/mount.hpp
+++ b/kernel/include/kernel/filesystem/mount.hpp
@@ -33,12 +33,12 @@ namespace kernel::filesystem
/**
@brief Get the dentry where the filesystem is mounted.
*/
- [[nodiscard]] auto get_mount_dentry() const -> kstd::shared_ptr<dentry> const &;
+ [[nodiscard]] auto mount_dentry() const -> kstd::shared_ptr<dentry> const &;
/**
@brief Get the root dentry of the mounted filesystem.
*/
- [[nodiscard]] auto get_root_dentry() const -> kstd::shared_ptr<dentry> const &;
+ [[nodiscard]] auto root_dentry() const -> kstd::shared_ptr<dentry> const &;
/**
@brief Get the filesystem instance being mounted.
@@ -48,12 +48,12 @@ namespace kernel::filesystem
/**
@brief Get the path at which the filesystem is mounted.
*/
- [[nodiscard]] auto get_mount_path() const -> kstd::string;
+ [[nodiscard]] auto mount_path() const -> kstd::string;
/**
@brief Get the parent mount that this mount was attached beneath.
*/
- [[nodiscard]] auto get_parent_mount() const -> kstd::shared_ptr<mount> const &;
+ [[nodiscard]] auto parent_mount() const -> kstd::shared_ptr<mount> const &;
/**
@brief Increment the reference count for this mount.
@@ -64,7 +64,7 @@ namespace kernel::filesystem
@brief Decrement the reference count for this mount.
@return True if the reference count reached zero, false otherwise.
*/
- auto decrement_ref_count() -> bool;
+ [[nodiscard]] auto decrement_ref_count() -> bool;
/**
@brief Check if the mount is ready to be unmounted.
@@ -76,7 +76,7 @@ namespace kernel::filesystem
@brief Get the current reference count for this mount.
@return The current reference count.
*/
- [[nodiscard]] auto get_ref_count() const -> size_t;
+ [[nodiscard]] auto ref_count() const -> size_t;
private:
kstd::shared_ptr<dentry> m_mount_dentry;
diff --git a/kernel/include/kernel/filesystem/open_file_descriptor.hpp b/kernel/include/kernel/filesystem/open_file_descriptor.hpp
index 7ca7350..fd10e64 100644
--- a/kernel/include/kernel/filesystem/open_file_descriptor.hpp
+++ b/kernel/include/kernel/filesystem/open_file_descriptor.hpp
@@ -50,7 +50,7 @@ namespace kernel::filesystem
@brief Returns the current file offset for this open file descriptor.
@return The current file offset in bytes.
*/
- [[nodiscard]] auto get_offset() const -> size_t;
+ [[nodiscard]] auto offset() const -> size_t;
/**
@brief Return a reference to the dentry associated with this open file descriptor.
diff --git a/kernel/include/kernel/filesystem/open_file_table.hpp b/kernel/include/kernel/filesystem/open_file_table.hpp
index 694f3b6..5794e4c 100644
--- a/kernel/include/kernel/filesystem/open_file_table.hpp
+++ b/kernel/include/kernel/filesystem/open_file_table.hpp
@@ -6,6 +6,9 @@
#include <kstd/memory>
#include <kstd/vector>
+#include <cstddef>
+#include <unistd.h>
+
namespace kernel::filesystem
{
/**
@@ -37,21 +40,21 @@ namespace kernel::filesystem
@param fd The file descriptor to add.
@return The file descriptor index assigned to the file, or -1 on failure.
*/
- auto add_file(kstd::shared_ptr<open_file_descriptor> const & fd) -> int;
+ auto add_file(kstd::shared_ptr<open_file_descriptor> const & fd) -> ssize_t;
/**
@brief Get a file from the open file table.
@param fd The file descriptor index to retrieve.
@return A pointer to the requested file descriptor, or a null pointer if not found.
*/
- [[nodiscard]] auto get_file(int fd) const -> kstd::shared_ptr<open_file_descriptor>;
+ [[nodiscard]] auto file(size_t fd) const -> kstd::shared_ptr<open_file_descriptor>;
/**
@brief Remove a file from the open file table.
@param fd The file descriptor index to remove.
@return 0 on success, or -1 on failure.
*/
- auto remove_file(int fd) -> int;
+ auto remove_file(size_t fd) -> ssize_t;
private:
open_file_table() = default;
diff --git a/kernel/include/kernel/filesystem/rootfs/filesystem.hpp b/kernel/include/kernel/filesystem/rootfs/filesystem.hpp
index f99440b..3c2dcb1 100644
--- a/kernel/include/kernel/filesystem/rootfs/filesystem.hpp
+++ b/kernel/include/kernel/filesystem/rootfs/filesystem.hpp
@@ -33,7 +33,7 @@ namespace kernel::filesystem::rootfs
@param name The name of the inode to look up.
@return Always returns nullptr.
*/
- auto lookup(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name)
+ [[nodiscard]] auto lookup(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name) const
-> kstd::shared_ptr<kernel::filesystem::inode> override;
};
} // namespace kernel::filesystem::rootfs
diff --git a/kernel/include/kernel/filesystem/rootfs/inode.hpp b/kernel/include/kernel/filesystem/rootfs/inode.hpp
index 2671207..0f21eaa 100644
--- a/kernel/include/kernel/filesystem/rootfs/inode.hpp
+++ b/kernel/include/kernel/filesystem/rootfs/inode.hpp
@@ -8,6 +8,7 @@
#include <kstd/vector>
#include <cstddef>
+
namespace kernel::filesystem::rootfs
{
/**
diff --git a/kernel/include/kernel/filesystem/vfs.hpp b/kernel/include/kernel/filesystem/vfs.hpp
index 0058d04..aec8bfe 100644
--- a/kernel/include/kernel/filesystem/vfs.hpp
+++ b/kernel/include/kernel/filesystem/vfs.hpp
@@ -97,10 +97,10 @@ namespace kernel::filesystem
* - resolve_path() for the dentry only.
* - find_mount() for the mount context only.
*/
- [[nodiscard]] auto resolve_path_internal(std::string_view path)
+ [[nodiscard]] auto resolve_path_internal(std::string_view path) const
-> std::pair<kstd::shared_ptr<dentry>, kstd::shared_ptr<mount>>;
- [[nodiscard]] auto resolve_path(std::string_view path) -> kstd::shared_ptr<dentry>;
- [[nodiscard]] auto find_mount(std::string_view path) -> kstd::shared_ptr<mount>;
+ [[nodiscard]] auto resolve_path(std::string_view path) const -> kstd::shared_ptr<dentry>;
+ [[nodiscard]] auto find_mount(std::string_view path) const -> kstd::shared_ptr<mount>;
auto do_mount_internal(kstd::shared_ptr<dentry> const & mount_point_dentry,
kstd::shared_ptr<mount> const & parent_mount, kstd::shared_ptr<filesystem> const & fs)
diff --git a/kernel/include/kernel/test_support/filesystem/filesystem.hpp b/kernel/include/kernel/test_support/filesystem/filesystem.hpp
index dab0892..5f26022 100644
--- a/kernel/include/kernel/test_support/filesystem/filesystem.hpp
+++ b/kernel/include/kernel/test_support/filesystem/filesystem.hpp
@@ -14,7 +14,7 @@ namespace kernel::tests::filesystem
{
filesystem() = default;
- auto lookup(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name)
+ [[nodiscard]] auto lookup(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name) const
-> kstd::shared_ptr<kernel::filesystem::inode> override;
};
} // namespace kernel::tests::filesystem
diff --git a/kernel/kapi/filesystem.cpp b/kernel/kapi/filesystem.cpp
index 53a71be..db61c34 100644
--- a/kernel/kapi/filesystem.cpp
+++ b/kernel/kapi/filesystem.cpp
@@ -13,7 +13,7 @@
namespace kapi::filesystem
{
- auto mount(std::string_view source, std::string_view target) -> int
+ auto mount(std::string_view source, std::string_view target) -> ssize_t
{
if (kernel::filesystem::vfs::get().do_mount(source, target) == kernel::filesystem::vfs::operation_result::success)
{
@@ -22,7 +22,7 @@ namespace kapi::filesystem
return -1;
}
- auto umount(std::string_view target) -> int
+ auto umount(std::string_view target) -> ssize_t
{
if (kernel::filesystem::vfs::get().unmount(target) == kernel::filesystem::vfs::operation_result::success)
{
@@ -31,7 +31,7 @@ namespace kapi::filesystem
return -1;
}
- auto open(std::string_view path) -> int
+ auto open(std::string_view path) -> ssize_t
{
if (auto dentry = kernel::filesystem::vfs::get().open(path))
{
@@ -42,11 +42,11 @@ namespace kapi::filesystem
return -1;
}
- auto close(int file_descriptor) -> int
+ auto close(size_t file_descriptor) -> ssize_t
{
- if (auto open_file_descriptor = kernel::filesystem::open_file_table::get().get_file(file_descriptor))
+ if (auto open_file_descriptor = kernel::filesystem::open_file_table::get().file(file_descriptor))
{
- if (kernel::filesystem::vfs::get().close(open_file_descriptor->get_dentry()->get_absolute_path().view()) ==
+ if (kernel::filesystem::vfs::get().close(open_file_descriptor->get_dentry()->absolute_path().view()) ==
kernel::filesystem::vfs::operation_result::success)
{
return kernel::filesystem::open_file_table::get().remove_file(file_descriptor);
@@ -55,9 +55,9 @@ namespace kapi::filesystem
return -1;
}
- auto read(int file_descriptor, void * buffer, size_t size) -> ssize_t
+ auto read(size_t file_descriptor, void * buffer, size_t size) -> ssize_t
{
- if (auto open_file_descriptor = kernel::filesystem::open_file_table::get().get_file(file_descriptor))
+ if (auto open_file_descriptor = kernel::filesystem::open_file_table::get().file(file_descriptor))
{
return open_file_descriptor->read(buffer, size);
}
@@ -65,9 +65,9 @@ namespace kapi::filesystem
return -1;
}
- auto write(int file_descriptor, void const * buffer, size_t size) -> ssize_t
+ auto write(size_t file_descriptor, void const * buffer, size_t size) -> ssize_t
{
- if (auto open_file_descriptor = kernel::filesystem::open_file_table::get().get_file(file_descriptor))
+ if (auto open_file_descriptor = kernel::filesystem::open_file_table::get().file(file_descriptor))
{
return open_file_descriptor->write(buffer, size);
}
diff --git a/kernel/src/devices/block_device_utils.cpp b/kernel/src/devices/block_device_utils.cpp
index cb8ecba..18d1e9d 100644
--- a/kernel/src/devices/block_device_utils.cpp
+++ b/kernel/src/devices/block_device_utils.cpp
@@ -42,7 +42,9 @@ namespace kernel::devices::block_device_utils
size_t const capacity = block_dev->capacity();
if (offset >= capacity)
+ {
return 0;
+ }
size_t const total_to_process = std::min(size, capacity - offset);
kstd::vector<std::byte> scratch_buffer{block_size};
diff --git a/kernel/src/filesystem/dentry.cpp b/kernel/src/filesystem/dentry.cpp
index d963ed7..14de875 100644
--- a/kernel/src/filesystem/dentry.cpp
+++ b/kernel/src/filesystem/dentry.cpp
@@ -34,17 +34,17 @@ namespace kernel::filesystem
return m_inode;
}
- auto dentry::get_parent() const -> kstd::shared_ptr<dentry> const &
+ auto dentry::parent() const -> kstd::shared_ptr<dentry> const &
{
return m_parent;
}
- auto dentry::get_name() const -> std::string_view
+ auto dentry::name() const -> std::string_view
{
return m_name.view();
}
- auto dentry::get_absolute_path() const -> kstd::string
+ auto dentry::absolute_path() const -> kstd::string
{
kstd::string path = m_name;
diff --git a/kernel/src/filesystem/dentry.tests.cpp b/kernel/src/filesystem/dentry.tests.cpp
index e9ecbc8..b7690f5 100644
--- a/kernel/src/filesystem/dentry.tests.cpp
+++ b/kernel/src/filesystem/dentry.tests.cpp
@@ -21,9 +21,9 @@ SCENARIO("Dentry construction", "[filesystem][dentry]")
THEN("the dentry has the correct parent, inode, and name")
{
- REQUIRE(child_dentry.get_parent() == parent_dentry);
+ REQUIRE(child_dentry.parent() == parent_dentry);
REQUIRE(child_dentry.get_inode() == inode);
- REQUIRE(child_dentry.get_name() == "child");
+ REQUIRE(child_dentry.name() == "child");
}
THEN("no flag is set")
@@ -46,9 +46,9 @@ SCENARIO("Dentry construction", "[filesystem][dentry]")
THEN("the dentry has a null parent, the correct inode, and the correct name")
{
- REQUIRE(child_dentry.get_parent() == nullptr);
+ REQUIRE(child_dentry.parent() == nullptr);
REQUIRE(child_dentry.get_inode() == inode);
- REQUIRE(child_dentry.get_name() == "child");
+ REQUIRE(child_dentry.name() == "child");
}
THEN("no flag is set")
@@ -142,9 +142,9 @@ SCENARIO("Dentry path resolution", "[filesystem][dentry]")
THEN("the full path is constructed correctly")
{
- REQUIRE(root_dentry->get_absolute_path() == "/");
- REQUIRE(home_dentry->get_absolute_path() == "/home");
- REQUIRE(user_dentry->get_absolute_path() == "/home/user");
+ REQUIRE(root_dentry->absolute_path() == "/");
+ REQUIRE(home_dentry->absolute_path() == "/home");
+ REQUIRE(user_dentry->absolute_path() == "/home/user");
}
}
} \ No newline at end of file
diff --git a/kernel/src/filesystem/devfs/filesystem.cpp b/kernel/src/filesystem/devfs/filesystem.cpp
index 96e40a8..f0d8bf7 100644
--- a/kernel/src/filesystem/devfs/filesystem.cpp
+++ b/kernel/src/filesystem/devfs/filesystem.cpp
@@ -1,5 +1,6 @@
#include <kernel/filesystem/devfs/filesystem.hpp>
+#include "kernel/filesystem/filesystem.hpp"
#include <kernel/devices/storage/management.hpp>
#include <kernel/filesystem/devfs/inode.hpp>
#include <kernel/filesystem/device_inode.hpp>
@@ -22,7 +23,7 @@ namespace kernel::filesystem::devfs
return operation_result::success;
}
- auto filesystem::lookup(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name)
+ auto filesystem::lookup(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name) const
-> kstd::shared_ptr<kernel::filesystem::inode>
{
if (!parent || !parent->is_directory())
@@ -36,12 +37,11 @@ namespace kernel::filesystem::devfs
}
auto it = std::ranges::find_if(m_inodes, [&](auto const & dev_node) {
- auto device_inode_ptr = static_cast<device_inode *>(dev_node.get());
- if (!device_inode_ptr)
+ if (auto device_inode_ptr = static_cast<device_inode *>(dev_node.get()))
{
- return false;
+ return device_inode_ptr->device()->name() == name;
}
- return device_inode_ptr->device()->name() == name;
+ return false;
});
return (it != m_inodes.end()) ? *it : nullptr;
}
diff --git a/kernel/src/filesystem/devfs/inode.cpp b/kernel/src/filesystem/devfs/inode.cpp
index 2029a7f..7bbfbbe 100644
--- a/kernel/src/filesystem/devfs/inode.cpp
+++ b/kernel/src/filesystem/devfs/inode.cpp
@@ -4,12 +4,12 @@
namespace kernel::filesystem::devfs
{
- auto inode::read(void * /*buffer*/, size_t /*offset*/, size_t /*size*/) const -> size_t
+ auto inode::read(void *, size_t, size_t) const -> size_t
{
return 0;
}
- auto inode::write(void const * /*buffer*/, size_t /*offset*/, size_t /*size*/) -> size_t
+ auto inode::write(void const *, size_t, size_t) -> size_t
{
return 0;
}
diff --git a/kernel/src/filesystem/ext2/filesystem.cpp b/kernel/src/filesystem/ext2/filesystem.cpp
index 893cc38..df5b4c4 100644
--- a/kernel/src/filesystem/ext2/filesystem.cpp
+++ b/kernel/src/filesystem/ext2/filesystem.cpp
@@ -28,14 +28,12 @@ namespace kernel::filesystem::ext2
return operation_result::invalid_magic_number;
}
- auto const block_size = get_block_size();
auto const blocks_per_group = m_superblock.blocks_per_group;
auto const num_block_groups = (m_superblock.blocks_count + blocks_per_group - 1) / blocks_per_group;
m_block_group_descriptors = kstd::vector<block_group_descriptor>(num_block_groups);
- auto const block_group_descriptor_table_offset = block_size == 1024 ? 2 * block_size : block_size;
- m_backing_inode->read(m_block_group_descriptors.data(), block_group_descriptor_table_offset,
+ m_backing_inode->read(m_block_group_descriptors.data(), block_group_descriptor_table_offset(),
num_block_groups * sizeof(block_group_descriptor));
m_root_inode = read_inode(constants::root_inode_number);
@@ -47,7 +45,7 @@ namespace kernel::filesystem::ext2
return operation_result::success;
}
- auto filesystem::lookup(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name)
+ auto filesystem::lookup(kstd::shared_ptr<kernel::filesystem::inode> const & parent, std::string_view name) const
-> kstd::shared_ptr<kernel::filesystem::inode>
{
if (!parent || !parent->is_directory())
@@ -61,20 +59,19 @@ namespace kernel::filesystem::ext2
return nullptr;
}
- auto const block_size = get_block_size();
auto const & inode_data = ext2_parent->data();
- kstd::vector<uint8_t> buffer(block_size);
+ kstd::vector<uint8_t> buffer(block_size());
- for (uint32_t i = 0; i < get_inode_block_count(inode_data); ++i)
+ for (uint32_t i = 0; i < inode_block_count(inode_data); ++i)
{
auto const global_block_number = map_inode_block_index_to_global_block_number(i, inode_data);
- auto const block_offset = global_block_number * block_size;
- m_backing_inode->read(buffer.data(), block_offset, block_size);
+ auto const block_offset = global_block_number * block_size();
+ m_backing_inode->read(buffer.data(), block_offset, block_size());
auto const * entry = reinterpret_cast<linked_directory_entry const *>(buffer.data());
auto bytes_read = 0uz;
- while (bytes_read < block_size && entry->inode != 0)
+ while (bytes_read < block_size() && entry->inode != 0)
{
auto const entry_name = std::string_view{entry->name.data(), entry->name_len};
if (entry_name == name)
@@ -92,7 +89,6 @@ namespace kernel::filesystem::ext2
auto filesystem::read_inode(uint32_t inode_number) const -> kstd::shared_ptr<inode>
{
- auto const block_size = get_block_size();
auto const inodes_per_group = m_superblock.inodes_per_group;
auto const block_group_index = (inode_number - 1) / inodes_per_group;
auto const inode_index_within_group = (inode_number - 1) % inodes_per_group;
@@ -104,8 +100,8 @@ namespace kernel::filesystem::ext2
auto const & block_group_descriptor = m_block_group_descriptors.at(block_group_index);
auto const inode_table_start_block = block_group_descriptor.inode_table;
- auto const inode_table_offset = static_cast<size_t>(inode_table_start_block) * block_size;
- auto const inode_offset = inode_table_offset + inode_index_within_group * get_inode_size();
+ auto const inode_table_offset = static_cast<size_t>(inode_table_start_block) * block_size();
+ auto const inode_offset = inode_table_offset + inode_index_within_group * inode_size();
auto new_inode_data = inode_data{};
m_backing_inode->read(&new_inode_data, inode_offset, sizeof(inode_data));
@@ -113,7 +109,7 @@ namespace kernel::filesystem::ext2
return kstd::make_shared<inode>(this, new_inode_data);
}
- auto filesystem::map_inode_block_index_to_global_block_number(uint32_t inode_block_index, inode_data data) const
+ auto filesystem::map_inode_block_index_to_global_block_number(size_t inode_block_index, inode_data data) const
-> ssize_t
{
if (inode_block_index < constants::direct_block_count)
@@ -146,17 +142,18 @@ namespace kernel::filesystem::ext2
}
auto filesystem::read_singly_indirect_block_number(uint32_t singly_indirect_block_number,
- uint32_t block_index_in_singly_indirect_block) const -> uint32_t
+ size_t block_index_in_singly_indirect_block) const -> size_t
{
if (singly_indirect_block_number == 0)
{
return 0;
}
+
return read_block_number_at_index(singly_indirect_block_number, block_index_in_singly_indirect_block);
}
auto filesystem::read_doubly_indirect_block_number(uint32_t doubly_indirect_block_number,
- uint32_t block_index_in_doubly_indirect_block) const -> uint32_t
+ size_t block_index_in_doubly_indirect_block) const -> size_t
{
if (doubly_indirect_block_number == 0)
{
@@ -175,7 +172,7 @@ namespace kernel::filesystem::ext2
}
auto filesystem::read_triply_indirect_block_number(uint32_t triply_indirect_block_number,
- uint32_t block_index_in_triply_indirect_block) const -> uint32_t
+ size_t block_index_in_triply_indirect_block) const -> size_t
{
if (triply_indirect_block_number == 0)
{
@@ -193,54 +190,59 @@ namespace kernel::filesystem::ext2
return read_doubly_indirect_block_number(doubly_indirect_block_number, block_index_in_doubly_indirect_block);
}
- auto filesystem::read_block_number_at_index(uint32_t block_number, uint32_t index) const -> uint32_t
+ auto filesystem::read_block_number_at_index(uint32_t block_number, size_t index) const -> uint32_t
{
uint32_t block_number_buffer = 0;
- auto const block_start_offset = block_number * get_block_size();
+ auto const block_start_offset = block_number * block_size();
auto const number_start_address = block_start_offset + index * sizeof(uint32_t);
m_backing_inode->read(&block_number_buffer, number_start_address, sizeof(uint32_t));
return block_number_buffer;
}
- auto filesystem::block_numbers_per_block() const -> uint32_t
+ auto filesystem::block_numbers_per_block() const -> size_t
{
- return get_block_size() / sizeof(uint32_t);
+ return block_size() / sizeof(uint32_t);
}
- auto filesystem::block_numbers_per_singly_indirect_block() const -> uint32_t
+ auto filesystem::block_numbers_per_singly_indirect_block() const -> size_t
{
return block_numbers_per_block();
}
- auto filesystem::block_numbers_per_doubly_indirect_block() const -> uint32_t
+ auto filesystem::block_numbers_per_doubly_indirect_block() const -> size_t
{
return block_numbers_per_singly_indirect_block() * block_numbers_per_block();
}
- auto filesystem::block_numbers_per_triply_indirect_block() const -> uint32_t
+ auto filesystem::block_numbers_per_triply_indirect_block() const -> size_t
{
return block_numbers_per_doubly_indirect_block() * block_numbers_per_block();
}
- auto filesystem::get_block_size() const -> size_t
+ auto filesystem::block_size() const -> size_t
{
return constants::base_block_size << m_superblock.log_block_size;
}
- auto filesystem::get_revision_level() const -> size_t
+ auto filesystem::revision_level() const -> uint32_t
{
return m_superblock.rev_level;
}
- auto filesystem::get_inode_size() const -> size_t
+ auto filesystem::inode_size() const -> uint16_t
{
- return get_revision_level() == constants::good_old_revision ? 128 : m_superblock.inode_size;
+ return revision_level() == constants::good_old_revision ? 128 : m_superblock.inode_size;
}
- auto filesystem::get_inode_block_count(inode_data const & data) const -> uint32_t
+ auto filesystem::inode_block_count(inode_data const & data) const -> uint32_t
{
return data.blocks / (2 << m_superblock.log_block_size);
}
+
+ auto filesystem::block_group_descriptor_table_offset() const -> size_t
+ {
+ return block_size() == 1024 ? 2 * block_size() : block_size();
+ }
} // namespace kernel::filesystem::ext2
diff --git a/kernel/src/filesystem/ext2/inode.cpp b/kernel/src/filesystem/ext2/inode.cpp
index cfe0a35..35a32ee 100644
--- a/kernel/src/filesystem/ext2/inode.cpp
+++ b/kernel/src/filesystem/ext2/inode.cpp
@@ -25,18 +25,18 @@ namespace kernel::filesystem::ext2
auto inode::read(void * buffer, size_t offset, size_t size) const -> size_t
{
- auto const max_readable = get_size() - offset;
+ auto const max_readable = this->size() - offset;
auto const requested_size = std::min(size, max_readable);
- if (is_symbolic_link() && get_size() <= sizeof(m_data.block))
+ if (is_symbolic_link() && this->size() <= sizeof(m_data.block))
{
auto inline_target = reinterpret_cast<uint8_t const *>(m_data.block.data());
kstd::libc::memcpy(static_cast<uint8_t *>(buffer), inline_target + offset, requested_size);
return requested_size;
}
- auto block_index = offset / m_filesystem->get_block_size();
- auto in_block_offset = offset % m_filesystem->get_block_size();
+ auto block_index = offset / m_filesystem->block_size();
+ auto in_block_offset = offset % m_filesystem->block_size();
auto bytes_read = 0uz;
@@ -48,8 +48,7 @@ namespace kernel::filesystem::ext2
break;
}
- auto const bytes_to_read =
- std::min(requested_size - bytes_read, m_filesystem->get_block_size() - in_block_offset);
+ auto const bytes_to_read = std::min(requested_size - bytes_read, m_filesystem->block_size() - in_block_offset);
if (block_number == 0)
{
kstd::libc::memset(static_cast<uint8_t *>(buffer) + bytes_read, 0, bytes_to_read);
@@ -57,7 +56,7 @@ namespace kernel::filesystem::ext2
}
else
{
- auto const block_start_offset = block_number * m_filesystem->get_block_size();
+ auto const block_start_offset = block_number * m_filesystem->block_size();
auto const read_offset = block_start_offset + in_block_offset;
bytes_read += m_filesystem->backing_inode()->read(static_cast<uint8_t *>(buffer) + bytes_read, read_offset,
@@ -71,7 +70,7 @@ namespace kernel::filesystem::ext2
return bytes_read;
}
- auto inode::write(void const * /*buffer*/, size_t /*offset*/, size_t /*size*/) -> size_t
+ auto inode::write(void const *, size_t, size_t) -> size_t
{
kapi::system::panic("[EXT2] inode::write is not implemented yet");
return 0;
@@ -97,11 +96,11 @@ namespace kernel::filesystem::ext2
return (m_data.mode & constants::mode_mask) == constants::mode_symbolic_link;
}
- auto inode::get_size() const -> size_t
+ auto inode::size() const -> uint64_t
{
uint64_t size = m_data.size;
- if (m_filesystem->get_revision_level() > constants::good_old_revision && is_regular())
+ if (m_filesystem->revision_level() > constants::good_old_revision && is_regular())
{
size |= static_cast<uint64_t>(m_data.dir_acl) << 32;
}
diff --git a/kernel/src/filesystem/ext2/inode.tests.cpp b/kernel/src/filesystem/ext2/inode.tests.cpp
index efc0660..4aecc04 100644
--- a/kernel/src/filesystem/ext2/inode.tests.cpp
+++ b/kernel/src/filesystem/ext2/inode.tests.cpp
@@ -325,7 +325,7 @@ SCENARIO("Ext2 inode get_size() correctly returns size depending on revision lev
auto inode = kernel::filesystem::ext2::inode{&fs, data};
- REQUIRE(inode.get_size() == 256);
+ REQUIRE(inode.size() == 256);
}
THEN("the inode size is 256 if mode = directory")
@@ -334,7 +334,7 @@ SCENARIO("Ext2 inode get_size() correctly returns size depending on revision lev
auto inode = kernel::filesystem::ext2::inode{&fs, data};
- REQUIRE(inode.get_size() == 256);
+ REQUIRE(inode.size() == 256);
}
}
@@ -361,7 +361,7 @@ SCENARIO("Ext2 inode get_size() correctly returns size depending on revision lev
auto inode = kernel::filesystem::ext2::inode{&fs, data};
- REQUIRE(inode.get_size() == 0x0000'0020'0000'0100);
+ REQUIRE(inode.size() == 0x0000'0020'0000'0100);
}
THEN("the inode size is 256 if mode = directory")
@@ -370,7 +370,7 @@ SCENARIO("Ext2 inode get_size() correctly returns size depending on revision lev
auto inode = kernel::filesystem::ext2::inode{&fs, data};
- REQUIRE(inode.get_size() == 256);
+ REQUIRE(inode.size() == 256);
}
}
} \ No newline at end of file
diff --git a/kernel/src/filesystem/mount.cpp b/kernel/src/filesystem/mount.cpp
index 1e04083..b64c370 100644
--- a/kernel/src/filesystem/mount.cpp
+++ b/kernel/src/filesystem/mount.cpp
@@ -27,7 +27,7 @@ namespace kernel::filesystem
}
}
- auto mount::get_mount_dentry() const -> kstd::shared_ptr<dentry> const &
+ auto mount::mount_dentry() const -> kstd::shared_ptr<dentry> const &
{
return m_mount_dentry;
}
@@ -37,21 +37,21 @@ namespace kernel::filesystem
return m_filesystem;
}
- auto mount::get_root_dentry() const -> kstd::shared_ptr<dentry> const &
+ auto mount::root_dentry() const -> kstd::shared_ptr<dentry> const &
{
return m_root_dentry;
}
- auto mount::get_mount_path() const -> kstd::string
+ auto mount::mount_path() const -> kstd::string
{
if (m_mount_dentry)
{
- return m_mount_dentry->get_absolute_path();
+ return m_mount_dentry->absolute_path();
}
return "/";
}
- auto mount::get_parent_mount() const -> kstd::shared_ptr<mount> const &
+ auto mount::parent_mount() const -> kstd::shared_ptr<mount> const &
{
return m_parent_mount;
}
@@ -77,7 +77,7 @@ namespace kernel::filesystem
return m_ref_count == 0;
}
- auto mount::get_ref_count() const -> size_t
+ auto mount::ref_count() const -> size_t
{
return m_ref_count;
}
diff --git a/kernel/src/filesystem/mount.tests.cpp b/kernel/src/filesystem/mount.tests.cpp
index e7dd709..6b66571 100644
--- a/kernel/src/filesystem/mount.tests.cpp
+++ b/kernel/src/filesystem/mount.tests.cpp
@@ -26,15 +26,15 @@ SCENARIO("Mount construction", "[filesystem][mount]")
THEN("the mount has the correct filesystem, root dentry, mount dentry, and mount path")
{
REQUIRE(mount.get_filesystem() == fs);
- REQUIRE(mount.get_root_dentry() == root_dentry);
- REQUIRE(mount.get_mount_dentry() == root_dentry);
- REQUIRE(mount.get_mount_path() == "/");
+ REQUIRE(mount.root_dentry() == root_dentry);
+ REQUIRE(mount.mount_dentry() == root_dentry);
+ REQUIRE(mount.mount_path() == "/");
REQUIRE(mount.is_ready_to_unmount());
}
THEN("the mount has no parent mount")
{
- REQUIRE(mount.get_parent_mount() == nullptr);
+ REQUIRE(mount.parent_mount() == nullptr);
}
}
@@ -63,19 +63,19 @@ SCENARIO("Mount reference counting", "[filesystem][mount]")
auto mount = kernel::filesystem::mount{root_dentry, root_dentry, fs, nullptr};
mount.increment_ref_count();
- REQUIRE(mount.get_ref_count() == 1);
+ REQUIRE(mount.ref_count() == 1);
REQUIRE_FALSE(mount.is_ready_to_unmount());
mount.increment_ref_count();
- REQUIRE(mount.get_ref_count() == 2);
+ REQUIRE(mount.ref_count() == 2);
REQUIRE_FALSE(mount.is_ready_to_unmount());
REQUIRE(mount.decrement_ref_count());
- REQUIRE(mount.get_ref_count() == 1);
+ REQUIRE(mount.ref_count() == 1);
REQUIRE_FALSE(mount.is_ready_to_unmount());
REQUIRE(mount.decrement_ref_count());
- REQUIRE(mount.get_ref_count() == 0);
+ REQUIRE(mount.ref_count() == 0);
REQUIRE(mount.is_ready_to_unmount());
}
@@ -84,7 +84,7 @@ SCENARIO("Mount reference counting", "[filesystem][mount]")
auto mount = kernel::filesystem::mount{root_dentry, root_dentry, fs, nullptr};
REQUIRE_FALSE(mount.decrement_ref_count());
- REQUIRE(mount.get_ref_count() == 0);
+ REQUIRE(mount.ref_count() == 0);
REQUIRE(mount.is_ready_to_unmount());
}
}
diff --git a/kernel/src/filesystem/mount_table.cpp b/kernel/src/filesystem/mount_table.cpp
index 9951590..26828b4 100644
--- a/kernel/src/filesystem/mount_table.cpp
+++ b/kernel/src/filesystem/mount_table.cpp
@@ -14,15 +14,15 @@ namespace kernel::filesystem
{
auto mount_table::has_child_mounts(kstd::shared_ptr<mount> const & parent_mount) const -> bool
{
- return std::ranges::any_of(
- m_mounts, [&parent_mount](auto const & mount) { return mount->get_parent_mount() == parent_mount; });
+ return std::ranges::any_of(m_mounts,
+ [&parent_mount](auto const & mount) { return mount->parent_mount() == parent_mount; });
}
void mount_table::add_mount(kstd::shared_ptr<mount> const & mount)
{
m_mounts.push_back(mount);
- if (auto mount_dentry = mount->get_mount_dentry())
+ if (auto mount_dentry = mount->mount_dentry())
{
mount_dentry->set_flag(dentry::dentry_flags::is_mount_point);
}
@@ -46,7 +46,7 @@ namespace kernel::filesystem
return operation_result::has_child_mounts;
}
- mount->get_mount_dentry()->unset_flag(dentry::dentry_flags::is_mount_point);
+ mount->mount_dentry()->unset_flag(dentry::dentry_flags::is_mount_point);
m_mounts.erase(mount_it);
return operation_result::removed;
}
@@ -60,7 +60,6 @@ namespace kernel::filesystem
auto mount_table::find_mount_iterator(std::string_view path) const
-> kstd::vector<kstd::shared_ptr<mount>>::const_iterator
{
- return std::ranges::find_last_if(m_mounts, [&](auto const & mount) { return mount->get_mount_path() == path; })
- .begin();
+ return std::ranges::find_last_if(m_mounts, [&](auto const & mount) { return mount->mount_path() == path; }).begin();
}
} // namespace kernel::filesystem \ No newline at end of file
diff --git a/kernel/src/filesystem/open_file_descriptor.cpp b/kernel/src/filesystem/open_file_descriptor.cpp
index ebaabef..a5567bf 100644
--- a/kernel/src/filesystem/open_file_descriptor.cpp
+++ b/kernel/src/filesystem/open_file_descriptor.cpp
@@ -33,7 +33,7 @@ namespace kernel::filesystem
return written_bytes;
}
- auto open_file_descriptor::get_offset() const -> size_t
+ auto open_file_descriptor::offset() const -> size_t
{
return m_offset;
}
diff --git a/kernel/src/filesystem/open_file_descriptor.tests.cpp b/kernel/src/filesystem/open_file_descriptor.tests.cpp
index 1910b8b..8c24cf0 100644
--- a/kernel/src/filesystem/open_file_descriptor.tests.cpp
+++ b/kernel/src/filesystem/open_file_descriptor.tests.cpp
@@ -26,7 +26,7 @@ SCENARIO("Open file descriptor construction", "[filesystem][open_file_descriptor
THEN("the initial offset is zero")
{
- REQUIRE(file_descriptor.get_offset() == 0);
+ REQUIRE(file_descriptor.offset() == 0);
}
}
}
@@ -42,29 +42,29 @@ SCENARIO("Open file descriptor read/write offset management", "[filesystem][open
THEN("the offset is updated correctly after reads")
{
REQUIRE(file_descriptor.read(nullptr, 100) == 100);
- REQUIRE(file_descriptor.get_offset() == 100);
+ REQUIRE(file_descriptor.offset() == 100);
REQUIRE(file_descriptor.read(nullptr, 50) == 50);
- REQUIRE(file_descriptor.get_offset() == 150);
+ REQUIRE(file_descriptor.offset() == 150);
}
THEN("the offset is updated correctly after writes")
{
REQUIRE(file_descriptor.write(nullptr, 200) == 200);
- REQUIRE(file_descriptor.get_offset() == 200);
+ REQUIRE(file_descriptor.offset() == 200);
REQUIRE(file_descriptor.write(nullptr, 25) == 25);
- REQUIRE(file_descriptor.get_offset() == 225);
+ REQUIRE(file_descriptor.offset() == 225);
}
THEN("reads and writes both update the same offset")
{
REQUIRE(file_descriptor.read(nullptr, 10) == 10);
- REQUIRE(file_descriptor.get_offset() == 10);
+ REQUIRE(file_descriptor.offset() == 10);
REQUIRE(file_descriptor.write(nullptr, 20) == 20);
- REQUIRE(file_descriptor.get_offset() == 30);
+ REQUIRE(file_descriptor.offset() == 30);
REQUIRE(file_descriptor.read(nullptr, 5) == 5);
- REQUIRE(file_descriptor.get_offset() == 35);
+ REQUIRE(file_descriptor.offset() == 35);
REQUIRE(file_descriptor.write(nullptr, 15) == 15);
- REQUIRE(file_descriptor.get_offset() == 50);
+ REQUIRE(file_descriptor.offset() == 50);
}
}
}
@@ -89,7 +89,7 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "Ope
kstd::vector<std::byte> buffer(32);
auto bytes_read = ofd->read(buffer.data(), buffer.size());
REQUIRE(bytes_read == 7);
- REQUIRE(ofd->get_offset() == 7);
+ REQUIRE(ofd->offset() == 7);
std::string_view buffer_as_str{reinterpret_cast<char *>(buffer.data()), static_cast<size_t>(bytes_read)};
REQUIRE(buffer_as_str == "info_1\n");
@@ -100,11 +100,11 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "Ope
kstd::vector<std::byte> buffer(4);
auto bytes_read_1 = ofd->read(buffer.data(), buffer.size() / 2);
REQUIRE(bytes_read_1 == buffer.size() / 2);
- REQUIRE(ofd->get_offset() == buffer.size() / 2);
+ REQUIRE(ofd->offset() == buffer.size() / 2);
auto bytes_read_2 = ofd->read(buffer.data() + buffer.size() / 2, buffer.size() / 2);
REQUIRE(bytes_read_2 == buffer.size() / 2);
- REQUIRE(ofd->get_offset() == buffer.size());
+ REQUIRE(ofd->offset() == buffer.size());
std::string_view buffer_as_str{reinterpret_cast<char *>(buffer.data()), bytes_read_1 + bytes_read_2};
REQUIRE(buffer_as_str == "info");
diff --git a/kernel/src/filesystem/open_file_table.cpp b/kernel/src/filesystem/open_file_table.cpp
index e47d229..4d52d36 100644
--- a/kernel/src/filesystem/open_file_table.cpp
+++ b/kernel/src/filesystem/open_file_table.cpp
@@ -9,6 +9,7 @@
#include <algorithm>
#include <cstddef>
#include <optional>
+#include <unistd.h>
namespace
{
@@ -37,7 +38,7 @@ namespace kernel::filesystem
return *global_open_file_table;
}
- auto open_file_table::add_file(kstd::shared_ptr<open_file_descriptor> const & file_descriptor) -> int
+ auto open_file_table::add_file(kstd::shared_ptr<open_file_descriptor> const & file_descriptor) -> ssize_t
{
if (!file_descriptor)
{
@@ -48,43 +49,31 @@ namespace kernel::filesystem
if (it != m_open_files.end())
{
*it = file_descriptor;
- return static_cast<int>(it - m_open_files.begin());
+ return it - m_open_files.begin();
}
m_open_files.push_back(file_descriptor);
- return static_cast<int>(m_open_files.size() - 1);
+ return m_open_files.size() - 1;
}
- auto open_file_table::get_file(int fd) const -> kstd::shared_ptr<open_file_descriptor>
+ auto open_file_table::file(size_t fd) const -> kstd::shared_ptr<open_file_descriptor>
{
- if (fd < 0)
+ if (fd >= m_open_files.size())
{
return nullptr;
}
- auto const index = static_cast<size_t>(fd);
- if (index >= m_open_files.size())
- {
- return nullptr;
- }
-
- return m_open_files.at(index);
+ return m_open_files.at(fd);
}
- auto open_file_table::remove_file(int fd) -> int
+ auto open_file_table::remove_file(size_t fd) -> ssize_t
{
- if (fd < 0)
- {
- return -1;
- }
-
- auto const index = static_cast<size_t>(fd);
- if (index >= m_open_files.size())
+ if (fd >= m_open_files.size())
{
return -1;
}
- m_open_files.at(index) = nullptr;
+ m_open_files.at(fd) = nullptr;
return 0;
}
} // namespace kernel::filesystem
diff --git a/kernel/src/filesystem/open_file_table.tests.cpp b/kernel/src/filesystem/open_file_table.tests.cpp
index 456d6b7..3e91111 100644
--- a/kernel/src/filesystem/open_file_table.tests.cpp
+++ b/kernel/src/filesystem/open_file_table.tests.cpp
@@ -36,7 +36,7 @@ SCENARIO("Open file table add/get file", "[filesystem][open_file_table]")
THEN("the file descriptor can be retrieved using the returned file descriptor")
{
- auto retrieved_descriptor = table.get_file(fd_1);
+ auto retrieved_descriptor = table.file(fd_1);
REQUIRE(retrieved_descriptor == file_descriptor_1);
}
}
@@ -52,15 +52,9 @@ SCENARIO("Open file table add/get file", "[filesystem][open_file_table]")
REQUIRE(fd == -1);
}
- THEN("retrieving a file descriptor with a negative file descriptor returns a null pointer")
- {
- auto retrieved_descriptor = table.get_file(-1);
- REQUIRE(retrieved_descriptor == nullptr);
- }
-
THEN("retrieving a file descriptor with an out-of-bounds file descriptor returns a null pointer")
{
- auto retrieved_descriptor = table.get_file(1000);
+ auto retrieved_descriptor = table.file(1000);
REQUIRE(retrieved_descriptor == nullptr);
}
}
@@ -82,7 +76,7 @@ SCENARIO("Open file table remove file", "[filesystem][open_file_table]")
THEN("the file descriptor can no longer be retrieved using the file descriptor")
{
- auto retrieved_descriptor = table.get_file(fd);
+ auto retrieved_descriptor = table.file(fd);
REQUIRE(retrieved_descriptor == nullptr);
}
}
@@ -94,7 +88,7 @@ SCENARIO("Open file table remove file", "[filesystem][open_file_table]")
THEN("the second file descriptor can still be retrieved using its file descriptor")
{
- auto retrieved_descriptor = table.get_file(fd2);
+ auto retrieved_descriptor = table.file(fd2);
REQUIRE(retrieved_descriptor == file_descriptor);
}
}
@@ -104,11 +98,6 @@ SCENARIO("Open file table remove file", "[filesystem][open_file_table]")
{
auto & table = kernel::filesystem::open_file_table::get();
- THEN("removing a file with a negative file descriptor does nothing")
- {
- REQUIRE_NOTHROW(table.remove_file(-1));
- }
-
THEN("removing a file with an out-of-bounds file descriptor does nothing")
{
REQUIRE_NOTHROW(table.remove_file(1000));
diff --git a/kernel/src/filesystem/rootfs/filesystem.cpp b/kernel/src/filesystem/rootfs/filesystem.cpp
index d49e237..0ba2936 100644
--- a/kernel/src/filesystem/rootfs/filesystem.cpp
+++ b/kernel/src/filesystem/rootfs/filesystem.cpp
@@ -1,5 +1,6 @@
#include <kernel/filesystem/rootfs/filesystem.hpp>
+#include "kernel/filesystem/filesystem.hpp"
#include <kernel/filesystem/inode.hpp>
#include <kernel/filesystem/rootfs/inode.hpp>
@@ -15,7 +16,7 @@ namespace kernel::filesystem::rootfs
return operation_result::success;
}
- auto filesystem::lookup(kstd::shared_ptr<kernel::filesystem::inode> const &, std::string_view)
+ auto filesystem::lookup(kstd::shared_ptr<kernel::filesystem::inode> const &, std::string_view) const
-> kstd::shared_ptr<kernel::filesystem::inode>
{
return nullptr;
diff --git a/kernel/src/filesystem/rootfs/inode.cpp b/kernel/src/filesystem/rootfs/inode.cpp
index dbe7948..f64fb87 100644
--- a/kernel/src/filesystem/rootfs/inode.cpp
+++ b/kernel/src/filesystem/rootfs/inode.cpp
@@ -2,19 +2,16 @@
#include <kernel/filesystem/rootfs/inode.hpp>
-#include <kstd/memory>
-#include <kstd/string>
-
#include <cstddef>
namespace kernel::filesystem::rootfs
{
- auto inode::read(void * /*buffer*/, size_t /*offset*/, size_t /*size*/) const -> size_t
+ auto inode::read(void *, size_t, size_t) const -> size_t
{
return 0;
}
- auto inode::write(void const * /*buffer*/, size_t /*offset*/, size_t /*size*/) -> size_t
+ auto inode::write(void const *, size_t, size_t) -> size_t
{
return 0;
}
diff --git a/kernel/src/filesystem/vfs.cpp b/kernel/src/filesystem/vfs.cpp
index 8636d0f..bf9a77d 100644
--- a/kernel/src/filesystem/vfs.cpp
+++ b/kernel/src/filesystem/vfs.cpp
@@ -153,7 +153,7 @@ namespace kernel::filesystem
-> void
{
auto new_fs_root =
- kstd::make_shared<dentry>(mount_point_dentry->get_parent(), fs->root_inode(), mount_point_dentry->get_name());
+ kstd::make_shared<dentry>(mount_point_dentry->parent(), fs->root_inode(), mount_point_dentry->name());
auto new_mount = kstd::make_shared<mount>(mount_point_dentry, new_fs_root, fs, parent_mount);
m_mount_table.add_mount(new_mount);
}
@@ -174,7 +174,8 @@ namespace kernel::filesystem
}
}
- auto vfs::resolve_path_internal(std::string_view path) -> std::pair<kstd::shared_ptr<dentry>, kstd::shared_ptr<mount>>
+ auto vfs::resolve_path_internal(std::string_view path) const
+ -> std::pair<kstd::shared_ptr<dentry>, kstd::shared_ptr<mount>>
{
if (!path::is_valid_absolute_path(path))
{
@@ -187,7 +188,7 @@ namespace kernel::filesystem
kapi::system::panic("[FILESYSTEM] no root mount found.");
}
- auto current_dentry = current_mount->get_root_dentry();
+ auto current_dentry = current_mount->root_dentry();
auto path_parts = path::split(path);
kstd::vector path_parts_vector(path_parts.begin(), path_parts.end());
@@ -207,16 +208,16 @@ namespace kernel::filesystem
if (part == "..")
{
- auto parent_dentry = current_dentry->get_parent();
+ auto parent_dentry = current_dentry->parent();
- if (current_dentry == current_mount->get_root_dentry())
+ if (current_dentry == current_mount->root_dentry())
{
- if (current_mount->get_mount_path() == "/")
+ if (current_mount->mount_path() == "/")
{
continue;
}
- if (auto parent_mount = current_mount->get_parent_mount())
+ if (auto parent_mount = current_mount->parent_mount())
{
current_mount = parent_mount;
current_dentry = parent_dentry;
@@ -242,13 +243,13 @@ namespace kernel::filesystem
}
else if (next_dentry->has_flag(dentry::dentry_flags::is_mount_point))
{
- current_mount = m_mount_table.find_mount(next_dentry->get_absolute_path().view());
+ current_mount = m_mount_table.find_mount(next_dentry->absolute_path().view());
if (!current_mount)
{
kapi::system::panic("[FILESYSTEM] mount for dentry with mounted flag not found.");
}
- next_dentry = current_mount->get_root_dentry();
+ next_dentry = current_mount->root_dentry();
}
if (next_dentry->get_inode()->is_symbolic_link())
@@ -271,7 +272,7 @@ namespace kernel::filesystem
if (path::is_valid_absolute_path(symbolic_link_path))
{
current_mount = m_mount_table.find_mount("/");
- current_dentry = current_mount->get_root_dentry();
+ current_dentry = current_mount->root_dentry();
}
continue;
}
@@ -281,12 +282,12 @@ namespace kernel::filesystem
return {current_dentry, current_mount};
}
- auto vfs::resolve_path(std::string_view path) -> kstd::shared_ptr<dentry>
+ auto vfs::resolve_path(std::string_view path) const -> kstd::shared_ptr<dentry>
{
return resolve_path_internal(path).first;
}
- auto vfs::find_mount(std::string_view path) -> kstd::shared_ptr<mount>
+ auto vfs::find_mount(std::string_view path) const -> kstd::shared_ptr<mount>
{
return resolve_path_internal(path).second;
}
diff --git a/kernel/src/filesystem/vfs.tests.cpp b/kernel/src/filesystem/vfs.tests.cpp
index 648ebb8..6fcc84e 100644
--- a/kernel/src/filesystem/vfs.tests.cpp
+++ b/kernel/src/filesystem/vfs.tests.cpp
@@ -105,7 +105,7 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "VFS
auto mounted_monkey_1 = vfs.open("/information/monkey_house/monkey_1.txt");
REQUIRE(mounted_monkey_1 != nullptr);
- REQUIRE(vfs.close(mounted_monkey_1->get_absolute_path().view()) ==
+ REQUIRE(vfs.close(mounted_monkey_1->absolute_path().view()) ==
kernel::filesystem::vfs::operation_result::success);
REQUIRE(vfs.unmount("/information") == kernel::filesystem::vfs::operation_result::success);
@@ -128,10 +128,9 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "VFS
REQUIRE(mounted_monkey_1 != nullptr);
REQUIRE(mounted_fish1 != nullptr);
- REQUIRE(vfs.close(mounted_monkey_1->get_absolute_path().view()) ==
- kernel::filesystem::vfs::operation_result::success);
- REQUIRE(vfs.close(mounted_fish1->get_absolute_path().view()) ==
+ REQUIRE(vfs.close(mounted_monkey_1->absolute_path().view()) ==
kernel::filesystem::vfs::operation_result::success);
+ REQUIRE(vfs.close(mounted_fish1->absolute_path().view()) == kernel::filesystem::vfs::operation_result::success);
REQUIRE(vfs.unmount("/information") == kernel::filesystem::vfs::operation_result::unmount_failed);
REQUIRE(vfs.unmount("/information/monkey_house/infrastructure") ==
@@ -148,7 +147,7 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "VFS
REQUIRE(vfs.unmount("/information") == kernel::filesystem::vfs::operation_result::unmount_failed);
- REQUIRE(vfs.close(mounted_monkey_1->get_absolute_path().view()) ==
+ REQUIRE(vfs.close(mounted_monkey_1->absolute_path().view()) ==
kernel::filesystem::vfs::operation_result::success);
REQUIRE(vfs.unmount("/information") == kernel::filesystem::vfs::operation_result::success);
@@ -165,8 +164,8 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "VFS
auto info_1 = vfs.open("/information/info_1.txt");
REQUIRE(info_1 != nullptr);
- REQUIRE(vfs.close(info_1->get_absolute_path().view()) == kernel::filesystem::vfs::operation_result::success);
- REQUIRE(vfs.close(info_1->get_absolute_path().view()) == kernel::filesystem::vfs::operation_result::close_failed);
+ REQUIRE(vfs.close(info_1->absolute_path().view()) == kernel::filesystem::vfs::operation_result::success);
+ REQUIRE(vfs.close(info_1->absolute_path().view()) == kernel::filesystem::vfs::operation_result::close_failed);
}
THEN("images can be stacked mounted and correct file system is unmounted again")
@@ -177,8 +176,7 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "VFS
auto mounted_tickets = vfs.open("/information/entrance/tickets.txt");
REQUIRE(mounted_tickets != nullptr);
- REQUIRE(vfs.close(mounted_tickets->get_absolute_path().view()) ==
- kernel::filesystem::vfs::operation_result::success);
+ REQUIRE(vfs.close(mounted_tickets->absolute_path().view()) == kernel::filesystem::vfs::operation_result::success);
REQUIRE(vfs.unmount("/information") == kernel::filesystem::vfs::operation_result::success);
mounted_tickets = vfs.open("/information/entrance/tickets.txt");
@@ -201,7 +199,7 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "VFS
auto water = vfs.open("/monkey_house/infrastructure/water.txt");
REQUIRE(water != nullptr);
- REQUIRE(vfs.close(water->get_absolute_path().view()) == kernel::filesystem::vfs::operation_result::success);
+ REQUIRE(vfs.close(water->absolute_path().view()) == kernel::filesystem::vfs::operation_result::success);
REQUIRE(vfs.unmount("/") == kernel::filesystem::vfs::operation_result::success);
@@ -222,7 +220,7 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "VFS
auto water = vfs.open("/monkey_house/infrastructure/water.txt");
REQUIRE(water != nullptr);
- REQUIRE(vfs.close(water->get_absolute_path().view()) == kernel::filesystem::vfs::operation_result::success);
+ REQUIRE(vfs.close(water->absolute_path().view()) == kernel::filesystem::vfs::operation_result::success);
auto dev_ram_16 = vfs.open("/dev/ram16");
REQUIRE(dev_ram_16 == nullptr);
@@ -240,7 +238,7 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "VFS
auto info_1 = vfs.open("/information/info_1.txt");
REQUIRE(info_1 != nullptr);
- REQUIRE(vfs.close(info_1->get_absolute_path().view()) == kernel::filesystem::vfs::operation_result::success);
+ REQUIRE(vfs.close(info_1->absolute_path().view()) == kernel::filesystem::vfs::operation_result::success);
REQUIRE(vfs.unmount("/dev") == kernel::filesystem::vfs::operation_result::success);
REQUIRE(vfs.unmount("/") == kernel::filesystem::vfs::operation_result::success);
@@ -363,7 +361,7 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "VFS
std::string_view buffer_as_str{reinterpret_cast<char *>(buffer.data()), bytes_read};
REQUIRE(buffer_as_str == "sheep_1");
- REQUIRE(vfs.close(dentry->get_absolute_path().view()) == kernel::filesystem::vfs::operation_result::success);
+ REQUIRE(vfs.close(dentry->absolute_path().view()) == kernel::filesystem::vfs::operation_result::success);
REQUIRE(vfs.unmount("/information") == kernel::filesystem::vfs::operation_result::success);
auto unmounted_sheep_1 = vfs.open("/information/sheep_1.txt");
@@ -396,8 +394,8 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "VFS
buffer_as_str = std::string_view{reinterpret_cast<char *>(goat_buffer.data()), bytes_read};
REQUIRE(buffer_as_str == "goat_1");
- REQUIRE(vfs.close(sheep_1->get_absolute_path().view()) == kernel::filesystem::vfs::operation_result::success);
- REQUIRE(vfs.close(goat_1->get_absolute_path().view()) == kernel::filesystem::vfs::operation_result::success);
+ REQUIRE(vfs.close(sheep_1->absolute_path().view()) == kernel::filesystem::vfs::operation_result::success);
+ REQUIRE(vfs.close(goat_1->absolute_path().view()) == kernel::filesystem::vfs::operation_result::success);
REQUIRE(vfs.unmount("/information") == kernel::filesystem::vfs::operation_result::unmount_failed);
@@ -408,7 +406,7 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "VFS
auto still_mounted_sheep_1 = vfs.open("/information/sheep_1.txt");
REQUIRE(still_mounted_sheep_1 != nullptr);
- REQUIRE(vfs.close(still_mounted_sheep_1->get_absolute_path().view()) ==
+ REQUIRE(vfs.close(still_mounted_sheep_1->absolute_path().view()) ==
kernel::filesystem::vfs::operation_result::success);
REQUIRE(vfs.unmount("/information") == kernel::filesystem::vfs::operation_result::success);
diff --git a/kernel/src/test_support/filesystem/filesystem.cpp b/kernel/src/test_support/filesystem/filesystem.cpp
index 12d43e0..ec70607 100644
--- a/kernel/src/test_support/filesystem/filesystem.cpp
+++ b/kernel/src/test_support/filesystem/filesystem.cpp
@@ -9,7 +9,7 @@
namespace kernel::tests::filesystem
{
- auto filesystem::lookup(kstd::shared_ptr<kernel::filesystem::inode> const &, std::string_view)
+ auto filesystem::lookup(kstd::shared_ptr<kernel::filesystem::inode> const &, std::string_view) const
-> kstd::shared_ptr<kernel::filesystem::inode>
{
return kstd::make_shared<inode>();