aboutsummaryrefslogtreecommitdiff
path: root/kernel/filesystem/include
diff options
context:
space:
mode:
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