From eb36544624c18a284debdf78b43fe627f40a8371 Mon Sep 17 00:00:00 2001 From: Marcel Braun Date: Mon, 13 Apr 2026 18:49:21 +0200 Subject: Rename and refactor --- kernel/kapi/filesystem.cpp | 60 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 kernel/kapi/filesystem.cpp (limited to 'kernel/kapi/filesystem.cpp') diff --git a/kernel/kapi/filesystem.cpp b/kernel/kapi/filesystem.cpp new file mode 100644 index 0000000..a734ac0 --- /dev/null +++ b/kernel/kapi/filesystem.cpp @@ -0,0 +1,60 @@ +#include "kapi/filesystem.hpp" + +#include "kernel/filesystem/file_descriptor_table.hpp" +#include "kernel/filesystem/vfs.hpp" + +#include +#include +#include + +namespace kapi::filesystem +{ + auto mount(std::string_view source, std::string_view target) -> int + { + // TODO BA-FS26 + } + + auto umount(std::string_view target) -> int + { + if (kernel::filesystem::vfs::get().unmount(target) == kernel::filesystem::vfs::operation_result::success) + { + return 0; + } + return -1; + } + + auto open(std::string_view path) -> int + { + if (auto open_file_description = kernel::filesystem::vfs::get().open(path)) + { + return kernel::filesystem::file_descriptor_table::get().add_file(open_file_description); + } + + return -1; + } + + auto close(int fd) -> int + { + return kernel::filesystem::file_descriptor_table::get().remove_file(fd); + } + + auto read(int fd, void * buffer, size_t size) -> ssize_t + { + if (auto open_file_description = kernel::filesystem::file_descriptor_table::get().get_file(fd)) + { + return open_file_description->read(buffer, size); + } + + return -1; + } + + auto write(int fd, void const * buffer, size_t size) -> ssize_t + { + if (auto open_file_description = kernel::filesystem::file_descriptor_table::get().get_file(fd)) + { + return open_file_description->write(buffer, size); + } + + return -1; + } +} // namespace kapi::filesystem \ No newline at end of file -- cgit v1.2.3 From 5e183b418b0e65dcdffa02a43702a0d6deb43b04 Mon Sep 17 00:00:00 2001 From: Marcel Braun Date: Mon, 13 Apr 2026 21:17:50 +0200 Subject: Back filesystem by inode and not device --- kernel/kapi/filesystem.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'kernel/kapi/filesystem.cpp') diff --git a/kernel/kapi/filesystem.cpp b/kernel/kapi/filesystem.cpp index a734ac0..30201b7 100644 --- a/kernel/kapi/filesystem.cpp +++ b/kernel/kapi/filesystem.cpp @@ -11,7 +11,11 @@ namespace kapi::filesystem { auto mount(std::string_view source, std::string_view target) -> int { - // TODO BA-FS26 + if (kernel::filesystem::vfs::get().do_mount(source, target) == kernel::filesystem::vfs::operation_result::success) + { + return 0; + } + return -1; } auto umount(std::string_view target) -> int -- cgit v1.2.3 From 1356405c9fc6d54cf9da4d5f6fd54c55d51ce66d Mon Sep 17 00:00:00 2001 From: Lukas Oesch Date: Sun, 19 Apr 2026 10:01:52 +0200 Subject: vfs open returns the dentry not the open file description --- kernel/kapi/filesystem.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'kernel/kapi/filesystem.cpp') diff --git a/kernel/kapi/filesystem.cpp b/kernel/kapi/filesystem.cpp index 30201b7..d3aa617 100644 --- a/kernel/kapi/filesystem.cpp +++ b/kernel/kapi/filesystem.cpp @@ -1,8 +1,11 @@ #include "kapi/filesystem.hpp" #include "kernel/filesystem/file_descriptor_table.hpp" +#include "kernel/filesystem/open_file_description.hpp" #include "kernel/filesystem/vfs.hpp" +#include + #include #include #include @@ -29,8 +32,9 @@ namespace kapi::filesystem auto open(std::string_view path) -> int { - if (auto open_file_description = kernel::filesystem::vfs::get().open(path)) + if (auto dentry = kernel::filesystem::vfs::get().open(path)) { + auto open_file_description = kstd::make_shared(dentry->get_inode()); return kernel::filesystem::file_descriptor_table::get().add_file(open_file_description); } -- cgit v1.2.3 From 2d8fed40bd0d0f8144783b6b344dc79944291b72 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Thu, 23 Apr 2026 13:31:17 +0200 Subject: chore: organize includes --- kernel/kapi/filesystem.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'kernel/kapi/filesystem.cpp') diff --git a/kernel/kapi/filesystem.cpp b/kernel/kapi/filesystem.cpp index d3aa617..eee3b8b 100644 --- a/kernel/kapi/filesystem.cpp +++ b/kernel/kapi/filesystem.cpp @@ -8,6 +8,7 @@ #include #include + #include namespace kapi::filesystem -- cgit v1.2.3 From f6f10575f75ac23d06e1d94f7861611503daa7af Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Thu, 23 Apr 2026 14:03:28 +0200 Subject: chore: banish relative includes --- kernel/kapi/filesystem.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'kernel/kapi/filesystem.cpp') diff --git a/kernel/kapi/filesystem.cpp b/kernel/kapi/filesystem.cpp index eee3b8b..c8d4c6d 100644 --- a/kernel/kapi/filesystem.cpp +++ b/kernel/kapi/filesystem.cpp @@ -1,8 +1,8 @@ -#include "kapi/filesystem.hpp" +#include -#include "kernel/filesystem/file_descriptor_table.hpp" -#include "kernel/filesystem/open_file_description.hpp" -#include "kernel/filesystem/vfs.hpp" +#include +#include +#include #include -- cgit v1.2.3 From c002a6fe53375d8757d43c48c59ac7f327f412b5 Mon Sep 17 00:00:00 2001 From: Lukas Oesch Date: Sat, 25 Apr 2026 23:31:26 +0200 Subject: add documentation, refactoring --- kernel/kapi/filesystem.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'kernel/kapi/filesystem.cpp') diff --git a/kernel/kapi/filesystem.cpp b/kernel/kapi/filesystem.cpp index c8d4c6d..741875a 100644 --- a/kernel/kapi/filesystem.cpp +++ b/kernel/kapi/filesystem.cpp @@ -42,14 +42,14 @@ namespace kapi::filesystem return -1; } - auto close(int fd) -> int + auto close(int file_descriptor) -> int { - return kernel::filesystem::file_descriptor_table::get().remove_file(fd); + return kernel::filesystem::file_descriptor_table::get().remove_file(file_descriptor); } - auto read(int fd, void * buffer, size_t size) -> ssize_t + auto read(int file_descriptor, void * buffer, size_t size) -> ssize_t { - if (auto open_file_description = kernel::filesystem::file_descriptor_table::get().get_file(fd)) + if (auto open_file_description = kernel::filesystem::file_descriptor_table::get().get_file(file_descriptor)) { return open_file_description->read(buffer, size); } @@ -57,9 +57,9 @@ namespace kapi::filesystem return -1; } - auto write(int fd, void const * buffer, size_t size) -> ssize_t + auto write(int file_descriptor, void const * buffer, size_t size) -> ssize_t { - if (auto open_file_description = kernel::filesystem::file_descriptor_table::get().get_file(fd)) + if (auto open_file_description = kernel::filesystem::file_descriptor_table::get().get_file(file_descriptor)) { return open_file_description->write(buffer, size); } -- cgit v1.2.3 From 4e2624b63236fa309c9ecf53a694b6ac9babf4e6 Mon Sep 17 00:00:00 2001 From: Lukas Oesch Date: Sun, 26 Apr 2026 10:11:24 +0200 Subject: rename open_file_description to open_file_descriptor --- kernel/kapi/filesystem.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'kernel/kapi/filesystem.cpp') diff --git a/kernel/kapi/filesystem.cpp b/kernel/kapi/filesystem.cpp index 741875a..8481f20 100644 --- a/kernel/kapi/filesystem.cpp +++ b/kernel/kapi/filesystem.cpp @@ -1,7 +1,7 @@ #include #include -#include +#include #include #include @@ -35,8 +35,8 @@ namespace kapi::filesystem { if (auto dentry = kernel::filesystem::vfs::get().open(path)) { - auto open_file_description = kstd::make_shared(dentry->get_inode()); - return kernel::filesystem::file_descriptor_table::get().add_file(open_file_description); + auto open_file_descriptor = kstd::make_shared(dentry->get_inode()); + return kernel::filesystem::file_descriptor_table::get().add_file(open_file_descriptor); } return -1; @@ -49,9 +49,9 @@ namespace kapi::filesystem auto read(int file_descriptor, void * buffer, size_t size) -> ssize_t { - if (auto open_file_description = kernel::filesystem::file_descriptor_table::get().get_file(file_descriptor)) + if (auto open_file_descriptor = kernel::filesystem::file_descriptor_table::get().get_file(file_descriptor)) { - return open_file_description->read(buffer, size); + return open_file_descriptor->read(buffer, size); } return -1; @@ -59,9 +59,9 @@ namespace kapi::filesystem auto write(int file_descriptor, void const * buffer, size_t size) -> ssize_t { - if (auto open_file_description = kernel::filesystem::file_descriptor_table::get().get_file(file_descriptor)) + if (auto open_file_descriptor = kernel::filesystem::file_descriptor_table::get().get_file(file_descriptor)) { - return open_file_description->write(buffer, size); + return open_file_descriptor->write(buffer, size); } return -1; -- cgit v1.2.3 From e0854bc0aad9e59d67fbf300cb223b116b127ffc Mon Sep 17 00:00:00 2001 From: Lukas Oesch Date: Sun, 26 Apr 2026 12:36:26 +0200 Subject: rename file_descriptor_table to open_file_table --- kernel/kapi/filesystem.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'kernel/kapi/filesystem.cpp') diff --git a/kernel/kapi/filesystem.cpp b/kernel/kapi/filesystem.cpp index 8481f20..4c68f28 100644 --- a/kernel/kapi/filesystem.cpp +++ b/kernel/kapi/filesystem.cpp @@ -1,7 +1,7 @@ #include -#include #include +#include #include #include @@ -36,7 +36,7 @@ namespace kapi::filesystem if (auto dentry = kernel::filesystem::vfs::get().open(path)) { auto open_file_descriptor = kstd::make_shared(dentry->get_inode()); - return kernel::filesystem::file_descriptor_table::get().add_file(open_file_descriptor); + return kernel::filesystem::open_file_table::get().add_file(open_file_descriptor); } return -1; @@ -44,12 +44,12 @@ namespace kapi::filesystem auto close(int file_descriptor) -> int { - return kernel::filesystem::file_descriptor_table::get().remove_file(file_descriptor); + return kernel::filesystem::open_file_table::get().remove_file(file_descriptor); } auto read(int file_descriptor, void * buffer, size_t size) -> ssize_t { - if (auto open_file_descriptor = kernel::filesystem::file_descriptor_table::get().get_file(file_descriptor)) + if (auto open_file_descriptor = kernel::filesystem::open_file_table::get().get_file(file_descriptor)) { return open_file_descriptor->read(buffer, size); } @@ -59,7 +59,7 @@ namespace kapi::filesystem auto write(int file_descriptor, void const * buffer, size_t size) -> ssize_t { - if (auto open_file_descriptor = kernel::filesystem::file_descriptor_table::get().get_file(file_descriptor)) + if (auto open_file_descriptor = kernel::filesystem::open_file_table::get().get_file(file_descriptor)) { return open_file_descriptor->write(buffer, size); } -- cgit v1.2.3 From c6953852b9e10823830688bdfb269650b080f1bb Mon Sep 17 00:00:00 2001 From: Marcel Braun Date: Thu, 14 May 2026 16:29:29 +0200 Subject: Track dentry instead of inode in open_file_descriptor --- kernel/kapi/filesystem.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'kernel/kapi/filesystem.cpp') diff --git a/kernel/kapi/filesystem.cpp b/kernel/kapi/filesystem.cpp index 4c68f28..77d7eb0 100644 --- a/kernel/kapi/filesystem.cpp +++ b/kernel/kapi/filesystem.cpp @@ -35,7 +35,7 @@ namespace kapi::filesystem { if (auto dentry = kernel::filesystem::vfs::get().open(path)) { - auto open_file_descriptor = kstd::make_shared(dentry->get_inode()); + auto open_file_descriptor = kstd::make_shared(dentry); return kernel::filesystem::open_file_table::get().add_file(open_file_descriptor); } -- cgit v1.2.3 From 1d647adb1ba20121eeb5c8e4470f48b2e972b3d4 Mon Sep 17 00:00:00 2001 From: Lukas Oesch Date: Fri, 15 May 2026 16:50:55 +0200 Subject: Mount can only be unmounted if no references are present, increment references on open file and decrement on close file --- kernel/kapi/filesystem.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'kernel/kapi/filesystem.cpp') diff --git a/kernel/kapi/filesystem.cpp b/kernel/kapi/filesystem.cpp index 77d7eb0..1782da5 100644 --- a/kernel/kapi/filesystem.cpp +++ b/kernel/kapi/filesystem.cpp @@ -44,7 +44,15 @@ namespace kapi::filesystem auto close(int file_descriptor) -> int { - return kernel::filesystem::open_file_table::get().remove_file(file_descriptor); + if (auto open_file_descriptor = kernel::filesystem::open_file_table::get().get_file(file_descriptor)) + { + if (kernel::filesystem::vfs::get().close(open_file_descriptor->get_dentry()) == + kernel::filesystem::vfs::operation_result::success) + { + return kernel::filesystem::open_file_table::get().remove_file(file_descriptor); + } + } + return -1; } auto read(int file_descriptor, void * buffer, size_t size) -> ssize_t -- cgit v1.2.3 From 1f9fe3cf18b561749cfbdb2db8ab7572ddc40c03 Mon Sep 17 00:00:00 2001 From: Lukas Oesch Date: Fri, 15 May 2026 22:38:24 +0200 Subject: uniform interface for open and close --- kernel/kapi/filesystem.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'kernel/kapi/filesystem.cpp') diff --git a/kernel/kapi/filesystem.cpp b/kernel/kapi/filesystem.cpp index 1782da5..53a71be 100644 --- a/kernel/kapi/filesystem.cpp +++ b/kernel/kapi/filesystem.cpp @@ -46,7 +46,7 @@ namespace kapi::filesystem { if (auto open_file_descriptor = kernel::filesystem::open_file_table::get().get_file(file_descriptor)) { - if (kernel::filesystem::vfs::get().close(open_file_descriptor->get_dentry()) == + if (kernel::filesystem::vfs::get().close(open_file_descriptor->get_dentry()->get_absolute_path().view()) == kernel::filesystem::vfs::operation_result::success) { return kernel::filesystem::open_file_table::get().remove_file(file_descriptor); -- cgit v1.2.3 From 3b2f36d242eb895fd893ec7a674ff608f44f69ac Mon Sep 17 00:00:00 2001 From: Lukas Oesch Date: Sat, 16 May 2026 16:12:36 +0200 Subject: refactoring --- kernel/kapi/filesystem.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'kernel/kapi/filesystem.cpp') 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); } -- cgit v1.2.3 From 2063d3e165a1b92a46c73badf56927228ed4d5e8 Mon Sep 17 00:00:00 2001 From: Marcel Braun Date: Mon, 25 May 2026 10:15:21 +0200 Subject: Refactor ssize_t --- kernel/kapi/filesystem.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) (limited to 'kernel/kapi/filesystem.cpp') diff --git a/kernel/kapi/filesystem.cpp b/kernel/kapi/filesystem.cpp index db61c34..838d2cb 100644 --- a/kernel/kapi/filesystem.cpp +++ b/kernel/kapi/filesystem.cpp @@ -5,15 +5,14 @@ #include #include +#include #include #include -#include - namespace kapi::filesystem { - auto mount(std::string_view source, std::string_view target) -> ssize_t + auto mount(std::string_view source, std::string_view target) -> kstd::ssize_t { if (kernel::filesystem::vfs::get().do_mount(source, target) == kernel::filesystem::vfs::operation_result::success) { @@ -22,7 +21,7 @@ namespace kapi::filesystem return -1; } - auto umount(std::string_view target) -> ssize_t + auto umount(std::string_view target) -> kstd::ssize_t { if (kernel::filesystem::vfs::get().unmount(target) == kernel::filesystem::vfs::operation_result::success) { @@ -31,7 +30,7 @@ namespace kapi::filesystem return -1; } - auto open(std::string_view path) -> ssize_t + auto open(std::string_view path) -> kstd::ssize_t { if (auto dentry = kernel::filesystem::vfs::get().open(path)) { @@ -42,7 +41,7 @@ namespace kapi::filesystem return -1; } - auto close(size_t file_descriptor) -> ssize_t + auto close(size_t file_descriptor) -> kstd::ssize_t { if (auto open_file_descriptor = kernel::filesystem::open_file_table::get().file(file_descriptor)) { @@ -55,7 +54,7 @@ namespace kapi::filesystem return -1; } - auto read(size_t file_descriptor, void * buffer, size_t size) -> ssize_t + auto read(size_t file_descriptor, void * buffer, size_t size) -> kstd::ssize_t { if (auto open_file_descriptor = kernel::filesystem::open_file_table::get().file(file_descriptor)) { @@ -65,7 +64,7 @@ namespace kapi::filesystem return -1; } - auto write(size_t file_descriptor, void const * buffer, size_t size) -> ssize_t + auto write(size_t file_descriptor, void const * buffer, size_t size) -> kstd::ssize_t { if (auto open_file_descriptor = kernel::filesystem::open_file_table::get().file(file_descriptor)) { -- cgit v1.2.3 From 6c8b068c15e28e91117f84cb8d5789f5fe6fcbd0 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Mon, 1 Jun 2026 20:31:57 +0200 Subject: kstd/string: simplify comparisons --- kernel/kapi/filesystem.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'kernel/kapi/filesystem.cpp') diff --git a/kernel/kapi/filesystem.cpp b/kernel/kapi/filesystem.cpp index 838d2cb..68b51c9 100644 --- a/kernel/kapi/filesystem.cpp +++ b/kernel/kapi/filesystem.cpp @@ -45,7 +45,7 @@ namespace kapi::filesystem { 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()->absolute_path().view()) == + if (kernel::filesystem::vfs::get().close(open_file_descriptor->get_dentry()->absolute_path()) == kernel::filesystem::vfs::operation_result::success) { return kernel::filesystem::open_file_table::get().remove_file(file_descriptor); -- cgit v1.2.3