aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2026-07-13 14:41:46 +0200
committerFelix Morgner <felix.morgner@ost.ch>2026-07-13 14:41:46 +0200
commitb105039ed6a0be0ba3da1827e711c649edef6d8e (patch)
treec0a5aecbe9ff529c31c229a2fdf11010ab12462d
parent3e73968fdad5d476a205be8c86d3b93d5ce7478c (diff)
downloadkernel-b105039ed6a0be0ba3da1827e711c649edef6d8e.tar.xz
kernel-b105039ed6a0be0ba3da1827e711c649edef6d8e.zip
kernel: clean up error API
-rw-r--r--kernel/kernel/filesystem/devfs/filesystem.cpp7
-rw-r--r--kernel/kernel/filesystem/error.hpp19
-rw-r--r--kernel/kernel/filesystem/ext2/filesystem.cpp14
-rw-r--r--kernel/kernel/filesystem/ext2/filesystem.tests.cpp3
-rw-r--r--kernel/kernel/filesystem/filesystem.cpp3
-rw-r--r--kernel/kernel/filesystem/open_file_table.cpp7
-rw-r--r--kernel/kernel/filesystem/open_file_table.tests.cpp6
-rw-r--r--kernel/kernel/filesystem/rootfs/filesystem.cpp3
-rw-r--r--kernel/kernel/filesystem/vfs.cpp14
-rw-r--r--kernel/kernel/filesystem/vfs.tests.cpp58
-rw-r--r--kernel/kernel/main.cpp2
11 files changed, 76 insertions, 60 deletions
diff --git a/kernel/kernel/filesystem/devfs/filesystem.cpp b/kernel/kernel/filesystem/devfs/filesystem.cpp
index 226102ba..8af12131 100644
--- a/kernel/kernel/filesystem/devfs/filesystem.cpp
+++ b/kernel/kernel/filesystem/devfs/filesystem.cpp
@@ -53,12 +53,12 @@ namespace kernel::filesystem::devfs
{
if (!parent || !parent->is_directory())
{
- return std::unexpected{make_error_code(kstd::errc::invalid_argument)};
+ return std::unexpected{vfs_errc::invalid_inode};
}
if (parent.get() != m_root_inode.get())
{
- return std::unexpected{make_error_code(kstd::errc::invalid_argument)};
+ return std::unexpected{vfs_errc::invalid_inode};
}
auto it = std::ranges::find_if(m_inodes, [&](auto const & dev_node) {
@@ -68,12 +68,13 @@ namespace kernel::filesystem::devfs
}
return false;
});
+
if (it != m_inodes.end())
{
return *it;
}
- return std::unexpected{make_error_code(vfs_errc::non_existent_path)};
+ return std::unexpected{vfs_errc::non_existent_path};
}
auto filesystem::build_device_inode_table() -> void
diff --git a/kernel/kernel/filesystem/error.hpp b/kernel/kernel/filesystem/error.hpp
index 267e5b7e..041b7b98 100644
--- a/kernel/kernel/filesystem/error.hpp
+++ b/kernel/kernel/filesystem/error.hpp
@@ -18,6 +18,10 @@ namespace kernel::filesystem
has_child_mounts,
invalid_filesystem,
unmount_failed,
+ symbolic_link_loop,
+ unsupported_filesystem,
+ invalid_file_descriptor,
+ invalid_inode,
};
namespace detail
@@ -47,6 +51,14 @@ namespace kernel::filesystem
return "invalid filesystem";
case vfs_errc::unmount_failed:
return "unmount failed";
+ case vfs_errc::symbolic_link_loop:
+ return "too many symbolic link levels";
+ case vfs_errc::unsupported_filesystem:
+ return "unsupported filesystem";
+ case vfs_errc::invalid_file_descriptor:
+ return "invalid file descriptor";
+ case vfs_errc::invalid_inode:
+ return "invalid inode";
default:
return "unknown VFS error";
}
@@ -58,6 +70,7 @@ namespace kernel::filesystem
{
case vfs_errc::invalid_path:
case vfs_errc::invalid_filesystem:
+ case vfs_errc::invalid_inode:
return make_error_condition(kstd::errc::invalid_argument);
case vfs_errc::non_existent_path:
case vfs_errc::mount_point_not_found:
@@ -66,6 +79,12 @@ namespace kernel::filesystem
case kernel::filesystem::vfs_errc::has_child_mounts:
case vfs_errc::unmount_failed:
return make_error_condition(kstd::errc::device_or_resource_busy);
+ case vfs_errc::symbolic_link_loop:
+ return make_error_condition(kstd::errc::too_many_symbolic_link_levels);
+ case vfs_errc::unsupported_filesystem:
+ return make_error_condition(kstd::errc::not_supported);
+ case vfs_errc::invalid_file_descriptor:
+ return make_error_condition(kstd::errc::bad_file_descriptor);
default:
return kstd::error_condition{value, *this};
}
diff --git a/kernel/kernel/filesystem/ext2/filesystem.cpp b/kernel/kernel/filesystem/ext2/filesystem.cpp
index fd77a0a2..55da8976 100644
--- a/kernel/kernel/filesystem/ext2/filesystem.cpp
+++ b/kernel/kernel/filesystem/ext2/filesystem.cpp
@@ -54,7 +54,7 @@ namespace kernel::filesystem::ext2
if (m_superblock.magic != constants::magic_number)
{
- return std::unexpected{make_error_code(ext2_errc::invalid_magic_number)};
+ return std::unexpected{ext2_errc::invalid_magic_number};
}
auto const blocks_per_group = m_superblock.blocks_per_group;
@@ -72,7 +72,7 @@ namespace kernel::filesystem::ext2
if (!m_root_inode || !m_root_inode->is_directory())
{
- return std::unexpected{make_error_code(ext2_errc::invalid_root_inode)};
+ return std::unexpected{ext2_errc::invalid_root_inode};
}
return {};
@@ -83,7 +83,7 @@ namespace kernel::filesystem::ext2
{
if (!parent || !parent->is_directory())
{
- return std::unexpected{make_error_code(kstd::errc::invalid_argument)};
+ return std::unexpected{vfs_errc::invalid_inode};
}
auto * ext2_parent = static_cast<inode *>(parent.get());
@@ -96,7 +96,7 @@ namespace kernel::filesystem::ext2
if (!global_block_number)
{
- return std::unexpected{make_error_code(ext2_errc::invalid_block_number)};
+ return std::unexpected{ext2_errc::invalid_block_number};
}
auto const block_offset = global_block_number.value() * block_size();
@@ -118,7 +118,7 @@ namespace kernel::filesystem::ext2
}
}
- return std::unexpected{make_error_code(vfs_errc::non_existent_path)};
+ return std::unexpected{vfs_errc::non_existent_path};
}
auto filesystem::read_inode(uint32_t inode_number) const -> std::expected<kstd::shared_ptr<inode>, kstd::error_code>
@@ -129,7 +129,7 @@ namespace kernel::filesystem::ext2
if (block_group_index >= m_block_group_descriptors.size())
{
- return std::unexpected{make_error_code(ext2_errc::invalid_block_group_index)};
+ return std::unexpected{ext2_errc::invalid_block_group_index};
}
auto const & block_group_descriptor = m_block_group_descriptors.at(block_group_index);
@@ -196,7 +196,7 @@ namespace kernel::filesystem::ext2
return block_number;
}
- return std::unexpected{make_error_code(ext2_errc::invalid_block_index)};
+ return std::unexpected{ext2_errc::invalid_block_index};
}
auto filesystem::read_block_number_at_index(uint32_t block_number, size_t index) const -> uint32_t
diff --git a/kernel/kernel/filesystem/ext2/filesystem.tests.cpp b/kernel/kernel/filesystem/ext2/filesystem.tests.cpp
index 9a677981..1702526e 100644
--- a/kernel/kernel/filesystem/ext2/filesystem.tests.cpp
+++ b/kernel/kernel/filesystem/ext2/filesystem.tests.cpp
@@ -82,8 +82,7 @@ SCENARIO("Ext2 filesystem rejects invalid magic", "[filesystem][ext2][filesystem
THEN("mount fails with invalid_magic_number")
{
- REQUIRE(fs.mount(dev_inode).error() ==
- make_error_code(kernel::filesystem::ext2::ext2_errc::invalid_magic_number));
+ REQUIRE(fs.mount(dev_inode).error() == kernel::filesystem::ext2::ext2_errc::invalid_magic_number);
}
}
}
diff --git a/kernel/kernel/filesystem/filesystem.cpp b/kernel/kernel/filesystem/filesystem.cpp
index cb60734f..1d15d410 100644
--- a/kernel/kernel/filesystem/filesystem.cpp
+++ b/kernel/kernel/filesystem/filesystem.cpp
@@ -1,5 +1,6 @@
#include <kernel/filesystem/filesystem.hpp>
+#include <kernel/filesystem/error.hpp>
#include <kernel/filesystem/ext2/filesystem.hpp>
#include <kernel/filesystem/inode.hpp>
@@ -37,7 +38,7 @@ namespace kernel::filesystem
}
}
- return std::unexpected{make_error_code(kstd::errc::not_supported)};
+ return std::unexpected{vfs_errc::unsupported_filesystem};
}
auto filesystem::mount(kstd::shared_ptr<inode> const & backing_inode) -> std::expected<void, kstd::error_code>
diff --git a/kernel/kernel/filesystem/open_file_table.cpp b/kernel/kernel/filesystem/open_file_table.cpp
index df5717a4..1109249a 100644
--- a/kernel/kernel/filesystem/open_file_table.cpp
+++ b/kernel/kernel/filesystem/open_file_table.cpp
@@ -1,5 +1,6 @@
#include <kernel/filesystem/open_file_table.hpp>
+#include <kernel/filesystem/error.hpp>
#include <kernel/filesystem/open_file_descriptor.hpp>
#include <kapi/system.hpp>
@@ -44,7 +45,7 @@ namespace kernel::filesystem
{
if (!file_descriptor)
{
- return std::unexpected{make_error_code(kstd::errc::invalid_argument)};
+ return std::unexpected{vfs_errc::invalid_file_descriptor};
}
auto it = std::ranges::find_if(m_open_files, [](auto const & open_file) { return open_file == nullptr; });
@@ -62,7 +63,7 @@ namespace kernel::filesystem
{
if (fd >= m_open_files.size() || m_open_files.at(fd) == nullptr)
{
- return std::unexpected{make_error_code(kstd::errc::invalid_argument)};
+ return std::unexpected{vfs_errc::invalid_file_descriptor};
}
return m_open_files.at(fd);
@@ -72,7 +73,7 @@ namespace kernel::filesystem
{
if (fd >= m_open_files.size() || m_open_files.at(fd) == nullptr)
{
- return std::unexpected{make_error_code(kstd::errc::invalid_argument)};
+ return std::unexpected{vfs_errc::invalid_file_descriptor};
}
m_open_files.at(fd) = nullptr;
diff --git a/kernel/kernel/filesystem/open_file_table.tests.cpp b/kernel/kernel/filesystem/open_file_table.tests.cpp
index 78afaa6d..69188528 100644
--- a/kernel/kernel/filesystem/open_file_table.tests.cpp
+++ b/kernel/kernel/filesystem/open_file_table.tests.cpp
@@ -50,13 +50,13 @@ SCENARIO("Open file table add/get file", "[filesystem][open_file_table]")
THEN("adding a null file descriptor returns an error")
{
auto fd = table.add_file(nullptr);
- REQUIRE(fd.error() == make_error_condition(kstd::errc::invalid_argument));
+ REQUIRE(fd.error() == kstd::errc::bad_file_descriptor);
}
THEN("retrieving a file descriptor with an out-of-bounds file descriptor returns an error")
{
auto retrieved_descriptor = table.file(1000);
- REQUIRE(retrieved_descriptor.error() == make_error_condition(kstd::errc::invalid_argument));
+ REQUIRE(retrieved_descriptor.error() == kstd::errc::bad_file_descriptor);
}
}
}
@@ -78,7 +78,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.file(*fd);
- REQUIRE(retrieved_descriptor.error() == make_error_condition(kstd::errc::invalid_argument));
+ REQUIRE(retrieved_descriptor.error() == kstd::errc::bad_file_descriptor);
}
}
diff --git a/kernel/kernel/filesystem/rootfs/filesystem.cpp b/kernel/kernel/filesystem/rootfs/filesystem.cpp
index 06b6d5c9..4efacb6b 100644
--- a/kernel/kernel/filesystem/rootfs/filesystem.cpp
+++ b/kernel/kernel/filesystem/rootfs/filesystem.cpp
@@ -1,5 +1,6 @@
#include <kernel/filesystem/rootfs/filesystem.hpp>
+#include <kernel/filesystem/error.hpp>
#include <kernel/filesystem/filesystem.hpp>
#include <kernel/filesystem/inode.hpp>
#include <kernel/filesystem/rootfs/inode.hpp>
@@ -44,6 +45,6 @@ namespace kernel::filesystem::rootfs
auto filesystem::lookup(kstd::shared_ptr<kernel::filesystem::inode> const &, std::string_view) const
-> std::expected<kstd::shared_ptr<kernel::filesystem::inode>, kstd::error_code>
{
- return std::unexpected{make_error_code(kstd::errc::no_such_file_or_directory)};
+ return std::unexpected{vfs_errc::non_existent_path};
}
} // namespace kernel::filesystem::rootfs
diff --git a/kernel/kernel/filesystem/vfs.cpp b/kernel/kernel/filesystem/vfs.cpp
index 45424ee2..5ffc3468 100644
--- a/kernel/kernel/filesystem/vfs.cpp
+++ b/kernel/kernel/filesystem/vfs.cpp
@@ -108,14 +108,14 @@ namespace kernel::filesystem
mount.value()->decrement_ref_count();
return {};
}
- return std::unexpected{make_error_code(vfs_errc::invalid_path)};
+ return std::unexpected{vfs_errc::invalid_path};
}
auto vfs::do_mount(std::string_view source, std::string_view target) -> std::expected<void, kstd::error_code>
{
if (!path::is_valid_path(source) || !path::is_valid_path(target))
{
- return std::unexpected{make_error_code(vfs_errc::invalid_path)};
+ return std::unexpected{vfs_errc::invalid_path};
}
auto resolved_target = resolve_path_internal(target);
@@ -146,7 +146,7 @@ namespace kernel::filesystem
{
if (!path::is_valid_path(path))
{
- return std::unexpected{make_error_code(vfs_errc::invalid_path)};
+ return std::unexpected{vfs_errc::invalid_path};
}
auto remove_result = m_mount_table.remove_mount(path);
@@ -156,10 +156,10 @@ namespace kernel::filesystem
}
else if (remove_result == mount_table::operation_result::mount_not_found)
{
- return std::unexpected{make_error_code(vfs_errc::mount_point_not_found)};
+ return std::unexpected{vfs_errc::mount_point_not_found};
}
- return std::unexpected{make_error_code(vfs_errc::unmount_failed)};
+ return std::unexpected{vfs_errc::unmount_failed};
}
auto vfs::do_mount_internal(kstd::shared_ptr<dentry> const & mount_point_dentry,
@@ -193,7 +193,7 @@ namespace kernel::filesystem
{
if (!path::is_valid_absolute_path(path))
{
- return std::unexpected{make_error_code(vfs_errc::invalid_path)};
+ return std::unexpected{vfs_errc::invalid_path};
}
auto current_mount = m_mount_table.find_mount("/");
@@ -270,7 +270,7 @@ namespace kernel::filesystem
{
if (symlink_counter++ > constants::symloop_max)
{
- return std::unexpected{make_error_code(kstd::errc::too_many_symbolic_link_levels)};
+ return std::unexpected{vfs_errc::symbolic_link_loop};
}
kstd::vector<uint8_t> buffer(constants::symlink_max_path_length);
diff --git a/kernel/kernel/filesystem/vfs.tests.cpp b/kernel/kernel/filesystem/vfs.tests.cpp
index e4f042e7..7ec70d9c 100644
--- a/kernel/kernel/filesystem/vfs.tests.cpp
+++ b/kernel/kernel/filesystem/vfs.tests.cpp
@@ -75,7 +75,7 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "VFS
auto & vfs = kernel::filesystem::vfs::get();
auto image_1 = vfs.open("/dev/image_1.txt");
- REQUIRE(image_1.error() == make_error_condition(kstd::errc::no_such_file_or_directory));
+ REQUIRE(image_1.error() == kstd::errc::no_such_file_or_directory);
auto dev = vfs.open("/dev/ram0");
REQUIRE(dev != nullptr);
@@ -112,7 +112,7 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "VFS
REQUIRE(vfs.unmount("/information"));
auto unmounted_monkey_1 = vfs.open("/information/monkey_house/monkey_1.txt");
- REQUIRE(unmounted_monkey_1.error() == make_error_condition(kstd::errc::no_such_file_or_directory));
+ REQUIRE(unmounted_monkey_1.error() == kstd::errc::no_such_file_or_directory);
auto info_1 = vfs.open("/information/info_1.txt");
REQUIRE(info_1 != nullptr);
@@ -178,7 +178,7 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "VFS
REQUIRE(vfs.unmount("/information"));
mounted_tickets = vfs.open("/information/entrance/tickets.txt");
- REQUIRE(mounted_tickets.error() == make_error_condition(kstd::errc::no_such_file_or_directory));
+ REQUIRE(mounted_tickets.error() == kstd::errc::no_such_file_or_directory);
auto mounted_monkey = vfs.open("/information/monkey_house/monkey_1.txt");
REQUIRE(mounted_monkey);
@@ -192,7 +192,7 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "VFS
REQUIRE(vfs.do_mount("/dev/ram16", "/"));
info_1 = vfs.open("/information/info_1.txt");
- REQUIRE(info_1.error() == make_error_condition(kstd::errc::no_such_file_or_directory));
+ REQUIRE(info_1.error() == kstd::errc::no_such_file_or_directory);
auto water = vfs.open("/monkey_house/infrastructure/water.txt");
REQUIRE(water != nullptr);
@@ -213,7 +213,7 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "VFS
REQUIRE(vfs.do_mount("/dev/ram16", "/"));
info_1 = vfs.open("/information/info_1.txt");
- REQUIRE(info_1.error() == make_error_condition(kstd::errc::no_such_file_or_directory));
+ REQUIRE(info_1.error() == kstd::errc::no_such_file_or_directory);
auto water = vfs.open("/monkey_house/infrastructure/water.txt");
REQUIRE(water != nullptr);
@@ -221,10 +221,9 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "VFS
REQUIRE(vfs.close(water.value()->absolute_path()));
auto dev_ram_16 = vfs.open("/dev/ram16");
- REQUIRE(dev_ram_16.error() == make_error_condition(kstd::errc::no_such_file_or_directory));
+ REQUIRE(dev_ram_16.error() == kstd::errc::no_such_file_or_directory);
- REQUIRE(vfs.do_mount("/dev/ram32", "/").error() ==
- make_error_code(kernel::filesystem::vfs_errc::non_existent_path));
+ REQUIRE(vfs.do_mount("/dev/ram32", "/").error() == kstd::errc::no_such_file_or_directory);
REQUIRE(vfs.unmount("/"));
@@ -243,7 +242,7 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "VFS
REQUIRE(vfs.unmount("/"));
info_1 = vfs.open("/information/info_1.txt");
- REQUIRE(info_1.error() == make_error_condition(kstd::errc::no_such_file_or_directory));
+ REQUIRE(info_1.error() == kstd::errc::no_such_file_or_directory);
REQUIRE(vfs.do_mount("/dev/ram0", "/"));
@@ -251,44 +250,39 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "VFS
REQUIRE(info_1 != nullptr);
auto dev_ram_0 = vfs.open("/dev/ram0");
- REQUIRE(dev_ram_0.error() == make_error_condition(kstd::errc::no_such_file_or_directory));
+ REQUIRE(dev_ram_0.error() == kstd::errc::no_such_file_or_directory);
}
THEN("mount with null file system fails")
{
- REQUIRE(vfs.do_mount("/closed.txt", "/information").error() == make_error_condition(kstd::errc::not_supported));
+ REQUIRE(vfs.do_mount("/closed.txt", "/information").error() == kstd::errc::not_supported);
}
THEN("mount with invalid path fails")
{
- REQUIRE(vfs.do_mount("/dev/ram16", "").error() == make_error_code(kernel::filesystem::vfs_errc::invalid_path));
- REQUIRE(vfs.do_mount("/dev/ram16", "information").error() ==
- make_error_code(kernel::filesystem::vfs_errc::invalid_path));
+ REQUIRE(vfs.do_mount("/dev/ram16", "").error() == kstd::errc::invalid_argument);
+ REQUIRE(vfs.do_mount("/dev/ram16", "information").error() == kstd::errc::invalid_argument);
}
THEN("mount with non-existent source path fails")
{
- REQUIRE(vfs.do_mount("/dev/nonexistent", "/information").error() ==
- make_error_code(kernel::filesystem::vfs_errc::non_existent_path));
+ REQUIRE(vfs.do_mount("/dev/nonexistent", "/information").error() == kstd::errc::no_such_file_or_directory);
}
THEN("mount with non-existent mount point fails")
{
- REQUIRE(vfs.do_mount("/dev/ram16", "/information/nonexistent").error() ==
- make_error_code(kernel::filesystem::vfs_errc::non_existent_path));
+ REQUIRE(vfs.do_mount("/dev/ram16", "/information/nonexistent").error() == kstd::errc::no_such_file_or_directory);
}
THEN("unmount with invalid path fails")
{
- REQUIRE(vfs.unmount("").error() == make_error_code(kernel::filesystem::vfs_errc::invalid_path));
- REQUIRE(vfs.unmount("information").error() ==
- make_error_code(kernel::filesystem::vfs_errc::mount_point_not_found));
+ REQUIRE(vfs.unmount("").error() == kstd::errc::invalid_argument);
+ REQUIRE(vfs.unmount("information").error() == kstd::errc::no_such_file_or_directory);
}
THEN("unmounting non-existent mount point returns expected error code")
{
- REQUIRE(vfs.unmount("/information/nonexistent").error() ==
- make_error_code(kernel::filesystem::vfs_errc::mount_point_not_found));
+ REQUIRE(vfs.unmount("/information/nonexistent").error() == kstd::errc::no_such_file_or_directory);
}
THEN("a file can be access if . in the path")
@@ -348,7 +342,7 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "VFS
REQUIRE(vfs.do_mount("/archiv/2024.img", "/information"));
auto info_1 = vfs.open("/information/info_1.txt");
- REQUIRE(info_1.error() == make_error_condition(kstd::errc::no_such_file_or_directory));
+ REQUIRE(info_1.error() == kstd::errc::no_such_file_or_directory);
auto dentry = vfs.open("/information/sheep_1.txt");
REQUIRE(dentry != nullptr);
@@ -363,7 +357,7 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "VFS
REQUIRE(vfs.unmount("/information"));
auto unmounted_sheep_1 = vfs.open("/information/sheep_1.txt");
- REQUIRE(unmounted_sheep_1.error() == make_error_condition(kstd::errc::no_such_file_or_directory));
+ REQUIRE(unmounted_sheep_1.error() == kstd::errc::no_such_file_or_directory);
}
THEN("the file-filesystem in the image can be mounted and in this filesystem can another file-filesystem be "
@@ -394,11 +388,11 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "VFS
REQUIRE(vfs.close(sheep_1.value()->absolute_path()));
REQUIRE(vfs.close(goat_1.value()->absolute_path()));
- REQUIRE(vfs.unmount("/information").error() == make_error_code(kernel::filesystem::vfs_errc::unmount_failed));
+ REQUIRE(vfs.unmount("/information").error() == kstd::errc::device_or_resource_busy);
REQUIRE(vfs.unmount("/information/stable"));
auto unmounted_goat_1 = vfs.open("/information/stable/petting_zoo/goat_1.txt");
- REQUIRE(unmounted_goat_1.error() == make_error_condition(kstd::errc::no_such_file_or_directory));
+ REQUIRE(unmounted_goat_1.error() == kstd::errc::no_such_file_or_directory);
auto still_mounted_sheep_1 = vfs.open("/information/sheep_1.txt");
REQUIRE(still_mounted_sheep_1 != nullptr);
@@ -407,7 +401,7 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "VFS
REQUIRE(vfs.unmount("/information"));
auto unmounted_sheep_1 = vfs.open("/information/sheep_1.txt");
- REQUIRE(unmounted_sheep_1.error() == make_error_condition(kstd::errc::no_such_file_or_directory));
+ REQUIRE(unmounted_sheep_1.error() == kstd::errc::no_such_file_or_directory);
}
}
@@ -425,7 +419,7 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "VFS
REQUIRE(vfs.do_mount("/dev/ram16", "/entrance"));
REQUIRE(vfs.do_mount("/entrance/archiv/2024.img", "/enclosures"));
- REQUIRE(vfs.unmount("/entrance").error() == make_error_code(kernel::filesystem::vfs_errc::unmount_failed));
+ REQUIRE(vfs.unmount("/entrance").error() == kstd::errc::device_or_resource_busy);
REQUIRE(vfs.unmount("/enclosures"));
REQUIRE(vfs.unmount("/entrance"));
}
@@ -484,21 +478,21 @@ SCENARIO_METHOD(kernel::tests::filesystem::storage_boot_module_vfs_fixture, "VFS
{
auto & vfs = kernel::filesystem::vfs::get();
auto invalid_symlink = vfs.open("/symlinks/invalid_absolute");
- REQUIRE(invalid_symlink.error() == make_error_code(kernel::filesystem::vfs_errc::non_existent_path));
+ REQUIRE(invalid_symlink.error() == kstd::errc::no_such_file_or_directory);
}
THEN("symbolic link containing an invalid relative path is handled correctly")
{
auto & vfs = kernel::filesystem::vfs::get();
auto invalid_symlink = vfs.open("/symlinks/invalid_relative");
- REQUIRE(invalid_symlink.error() == make_error_code(kernel::filesystem::vfs_errc::non_existent_path));
+ REQUIRE(invalid_symlink.error() == kstd::errc::no_such_file_or_directory);
}
THEN("circular symbolic links are detected and handled correctly")
{
auto & vfs = kernel::filesystem::vfs::get();
auto circular_symlink = vfs.open("/symlinks/symloop_a");
- REQUIRE(circular_symlink.error() == make_error_code(kstd::errc::too_many_symbolic_link_levels));
+ REQUIRE(circular_symlink.error() == kstd::errc::too_many_symbolic_link_levels);
}
}
diff --git a/kernel/kernel/main.cpp b/kernel/kernel/main.cpp
index 749040ce..28429b84 100644
--- a/kernel/kernel/main.cpp
+++ b/kernel/kernel/main.cpp
@@ -48,7 +48,7 @@ auto run_demo() -> void
// 3) show that /entrance/information/info_1.txt is not accessible before mounting
kstd::println("attempting to open /entrance/information/info_1.txt before mounting");
auto fd_before_mount = kapi::filesystem::open("/entrance/information/info_1.txt");
- if (!fd_before_mount && fd_before_mount.error() == make_error_condition(kstd::errc::no_such_file_or_directory))
+ if (!fd_before_mount && fd_before_mount.error() == kstd::errc::no_such_file_or_directory)
{
kstd::println("--> as expected the file could not be opened before mounting");
}