aboutsummaryrefslogtreecommitdiff
path: root/kernel/filesystem/include
diff options
context:
space:
mode:
authorLukas Oesch <lukasoesch20@gmail.com>2026-03-07 13:55:40 +0100
committerLukas Oesch <lukasoesch20@gmail.com>2026-03-17 16:42:49 +0100
commit2f4001cdb1f528d8a0d255d81ac3a8b9aa522fac (patch)
treec609c06cb272516ada077bfc95ad47d14f8c2b0b /kernel/filesystem/include
parent79aaf6113a9eca042ccc6f656fac6c7c243c608b (diff)
downloadteachos-2f4001cdb1f528d8a0d255d81ac3a8b9aa522fac.tar.xz
teachos-2f4001cdb1f528d8a0d255d81ac3a8b9aa522fac.zip
implement first draft of a file_descriptor_table and open_file_description
Diffstat (limited to 'kernel/filesystem/include')
-rw-r--r--kernel/filesystem/include/filesystem/file.hpp19
-rw-r--r--kernel/filesystem/include/filesystem/file_descriptor_table.hpp28
-rw-r--r--kernel/filesystem/include/filesystem/open_file_description.hpp24
3 files changed, 71 insertions, 0 deletions
diff --git a/kernel/filesystem/include/filesystem/file.hpp b/kernel/filesystem/include/filesystem/file.hpp
new file mode 100644
index 0000000..e7e1b12
--- /dev/null
+++ b/kernel/filesystem/include/filesystem/file.hpp
@@ -0,0 +1,19 @@
+#ifndef TEACH_OS_KERNEL_FILESYSTEM_FILE_HPP
+#define TEACH_OS_KERNEL_FILESYSTEM_FILE_HPP
+
+#include <cstddef>
+
+namespace filesystem
+{
+ struct file
+ {
+ virtual ~file() = default;
+
+ virtual auto open() -> void = 0;
+
+ virtual auto read(void * buffer, size_t offset, size_t size) const -> size_t = 0;
+ virtual auto write(void const * buffer, size_t offset, size_t size) -> size_t = 0;
+ };
+} // namespace filesystem
+
+#endif \ No newline at end of file
diff --git a/kernel/filesystem/include/filesystem/file_descriptor_table.hpp b/kernel/filesystem/include/filesystem/file_descriptor_table.hpp
new file mode 100644
index 0000000..a865d32
--- /dev/null
+++ b/kernel/filesystem/include/filesystem/file_descriptor_table.hpp
@@ -0,0 +1,28 @@
+#ifndef TEACH_OS_KERNEL_FILESYSTEM_FILE_DESCRIPTOR_TABLE_HPP
+#define TEACH_OS_KERNEL_FILESYSTEM_FILE_DESCRIPTOR_TABLE_HPP
+
+#include "open_file_description.hpp"
+
+#include <array>
+
+namespace filesystem
+{
+ struct file_descriptor_table
+ {
+ auto static init() -> void;
+ auto static get() -> file_descriptor_table &;
+
+ ~file_descriptor_table() = default;
+
+ auto add_file(open_file_description & f) -> int;
+ auto get_file(int fd) -> open_file_description &;
+ auto remove_file(int fd) -> void;
+
+ private:
+ file_descriptor_table() = default;
+
+ std::array<open_file_description *, 32> m_open_files{}; // TODO BA-FS26 use kstd::vector when available
+ };
+} // namespace filesystem
+
+#endif \ No newline at end of file
diff --git a/kernel/filesystem/include/filesystem/open_file_description.hpp b/kernel/filesystem/include/filesystem/open_file_description.hpp
new file mode 100644
index 0000000..e4febbd
--- /dev/null
+++ b/kernel/filesystem/include/filesystem/open_file_description.hpp
@@ -0,0 +1,24 @@
+#ifndef TEACH_OS_KERNEL_FILESYSTEM_OPEN_FILE_DESCRIPTION_HPP
+#define TEACH_OS_KERNEL_FILESYSTEM_OPEN_FILE_DESCRIPTION_HPP
+
+#include "file.hpp"
+
+#include <cstddef>
+
+namespace filesystem
+{
+ struct open_file_description
+ {
+ ~open_file_description() = default;
+
+ auto read(void * buffer, size_t size) -> size_t;
+ auto write(void const * buffer, size_t size) -> size_t;
+
+ private:
+ file * m_file{};
+ size_t m_offset{0};
+ };
+
+} // namespace filesystem
+
+#endif \ No newline at end of file