aboutsummaryrefslogtreecommitdiff
path: root/kernel/src/filesystem
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/src/filesystem')
-rw-r--r--kernel/src/filesystem/file_descriptor_table.cpp25
-rw-r--r--kernel/src/filesystem/file_descriptor_table.tests.cpp46
-rw-r--r--kernel/src/filesystem/vfs.cpp24
3 files changed, 33 insertions, 62 deletions
diff --git a/kernel/src/filesystem/file_descriptor_table.cpp b/kernel/src/filesystem/file_descriptor_table.cpp
index a31e2e6..1c062a1 100644
--- a/kernel/src/filesystem/file_descriptor_table.cpp
+++ b/kernel/src/filesystem/file_descriptor_table.cpp
@@ -10,13 +10,13 @@
#include <cstddef>
#include <optional>
-namespace kernel::filesystem
+namespace
{
- namespace
- {
- constinit auto static global_file_descriptor_table = std::optional<file_descriptor_table>{};
- } // namespace
+ constinit auto static global_file_descriptor_table = std::optional<kernel::filesystem::file_descriptor_table>{};
+} // namespace
+namespace kernel::filesystem
+{
auto file_descriptor_table::init() -> void
{
if (global_file_descriptor_table)
@@ -37,11 +37,6 @@ namespace kernel::filesystem
return *global_file_descriptor_table;
}
- auto file_descriptor_table::reset() -> void
- {
- global_file_descriptor_table.reset();
- }
-
auto file_descriptor_table::add_file(kstd::shared_ptr<open_file_description> const & file_description) -> int
{
if (!file_description)
@@ -92,4 +87,12 @@ namespace kernel::filesystem
m_open_files.at(index) = nullptr;
}
-} // namespace kernel::filesystem \ No newline at end of file
+} // namespace kernel::filesystem
+
+namespace kernel::tests::filesystem::file_descriptor_table
+{
+ auto deinit() -> void
+ {
+ global_file_descriptor_table.reset();
+ }
+} // namespace kernel::tests::filesystem::file_descriptor_table
diff --git a/kernel/src/filesystem/file_descriptor_table.tests.cpp b/kernel/src/filesystem/file_descriptor_table.tests.cpp
index d8c05ca..5aeadb2 100644
--- a/kernel/src/filesystem/file_descriptor_table.tests.cpp
+++ b/kernel/src/filesystem/file_descriptor_table.tests.cpp
@@ -1,7 +1,6 @@
#include "kernel/filesystem/file_descriptor_table.hpp"
#include "kernel/filesystem/open_file_description.hpp"
-#include "kernel/test_support/cpu.hpp"
#include "kernel/test_support/filesystem/inode.hpp"
#include <kstd/memory>
@@ -10,48 +9,7 @@
#include <catch2/catch_test_macros.hpp>
-struct file_descriptor_table_RAII
-{
- file_descriptor_table_RAII()
- {
- kernel::filesystem::file_descriptor_table::init();
- }
- ~file_descriptor_table_RAII()
- {
- kernel::filesystem::file_descriptor_table::reset();
- }
-};
-
-struct file_descriptor_table_reset_only
-{
- ~file_descriptor_table_reset_only()
- {
- kernel::filesystem::file_descriptor_table::reset();
- }
-};
-
-SCENARIO_METHOD(file_descriptor_table_reset_only, "File descriptor table initialization",
- "[filesystem][file_descriptor_table]")
-{
- THEN("accessing the file descriptor table before initialization panics")
- {
- REQUIRE_THROWS_AS(kernel::filesystem::file_descriptor_table::get(), kernel::tests::cpu::halt);
- }
-
- THEN("the file descriptor table can be initialized and accessed")
- {
- kernel::filesystem::file_descriptor_table::init();
- REQUIRE_NOTHROW(kernel::filesystem::file_descriptor_table::get());
- }
-
- THEN("initializing the file descriptor table more than once panics")
- {
- kernel::filesystem::file_descriptor_table::init();
- REQUIRE_THROWS_AS(kernel::filesystem::file_descriptor_table::init(), kernel::tests::cpu::halt);
- }
-}
-
-SCENARIO_METHOD(file_descriptor_table_RAII, "File descriptor table add/get file", "[filesystem][file_descriptor_table]")
+SCENARIO("File descriptor table add/get file", "[filesystem][file_descriptor_table]")
{
GIVEN("a file descriptor table and an open file description")
{
@@ -105,7 +63,7 @@ SCENARIO_METHOD(file_descriptor_table_RAII, "File descriptor table add/get file"
}
}
-SCENARIO_METHOD(file_descriptor_table_RAII, "File descriptor table remove file", "[filesystem][file_descriptor_table]")
+SCENARIO("File descriptor table remove file", "[filesystem][file_descriptor_table]")
{
GIVEN("a file descriptor table with an open file description")
{
diff --git a/kernel/src/filesystem/vfs.cpp b/kernel/src/filesystem/vfs.cpp
index 45ae053..67d1af2 100644
--- a/kernel/src/filesystem/vfs.cpp
+++ b/kernel/src/filesystem/vfs.cpp
@@ -17,13 +17,13 @@
#include <ranges>
#include <string_view>
-namespace kernel::filesystem
+namespace
{
- namespace
- {
- constinit auto static active_vfs = std::optional<vfs>{};
- } // namespace
+ constinit auto static active_vfs = std::optional<kernel::filesystem::vfs>{};
+} // namespace
+namespace kernel::filesystem
+{
auto vfs::init() -> void
{
if (active_vfs)
@@ -47,7 +47,10 @@ namespace kernel::filesystem
if (auto boot_device = storage_mgmt.determine_boot_device())
{
auto boot_root_fs = kernel::filesystem::filesystem::probe_and_mount(boot_device);
- do_mount_internal("/", root_fs_root_dentry, boot_root_fs);
+ if (boot_root_fs)
+ {
+ do_mount_internal("/", root_fs_root_dentry, boot_root_fs);
+ }
}
auto device_fs = kstd::make_shared<devfs::filesystem>();
@@ -172,5 +175,12 @@ namespace kernel::filesystem
return current_dentry;
}
+} // namespace kernel::filesystem
-} // namespace kernel::filesystem \ No newline at end of file
+namespace kernel::tests::filesystem::vfs
+{
+ auto deinit() -> void
+ {
+ active_vfs.reset();
+ }
+} // namespace kernel::tests::filesystem::vfs