aboutsummaryrefslogtreecommitdiff
path: root/kernel/filesystem
diff options
context:
space:
mode:
authorLukas Oesch <lukas.oesch@ost.ch>2026-03-17 19:48:59 +0100
committerLukas Oesch <lukas.oesch@ost.ch>2026-03-17 19:48:59 +0100
commite4291ea7c01cad04a02ca3f577dba9ccbadad110 (patch)
tree4af08f01820bf13fba8dda7646d036bcbdd3df53 /kernel/filesystem
parent59504cfd677dd3e9d9ddb0deea4df7614efedb84 (diff)
parentfde097681f96e2c6f23ecd71a5c0037acb3ac79e (diff)
downloadteachos-e4291ea7c01cad04a02ca3f577dba9ccbadad110.tar.xz
teachos-e4291ea7c01cad04a02ca3f577dba9ccbadad110.zip
Merge branch 'tidy-up-folder-structure' into 'develop-BA-FS26'
rename files to snake_case (temp_device part1 -> renamed to device later, due... See merge request teachos/kernel!12
Diffstat (limited to 'kernel/filesystem')
-rw-r--r--kernel/filesystem/CMakeLists.txt43
-rw-r--r--kernel/filesystem/include/filesystem/custody.hpp23
-rw-r--r--kernel/filesystem/include/filesystem/device_file.hpp32
-rw-r--r--kernel/filesystem/include/filesystem/ext2/ext2_filesystem.hpp24
-rw-r--r--kernel/filesystem/include/filesystem/file.hpp19
-rw-r--r--kernel/filesystem/include/filesystem/file_descriptor_table.hpp31
-rw-r--r--kernel/filesystem/include/filesystem/filesystem.hpp28
-rw-r--r--kernel/filesystem/include/filesystem/inode.hpp38
-rw-r--r--kernel/filesystem/include/filesystem/inode_file.hpp27
-rw-r--r--kernel/filesystem/include/filesystem/inode_metadata.hpp24
-rw-r--r--kernel/filesystem/include/filesystem/mount.hpp25
-rw-r--r--kernel/filesystem/include/filesystem/open_file_description.hpp28
-rw-r--r--kernel/filesystem/include/filesystem/vfs.hpp46
-rw-r--r--kernel/filesystem/src/custody.cpp30
-rw-r--r--kernel/filesystem/src/device_file.cpp124
-rw-r--r--kernel/filesystem/src/ext2/ext2_filesystem.cpp33
-rw-r--r--kernel/filesystem/src/file_descriptor_table.cpp82
-rw-r--r--kernel/filesystem/src/filesystem.cpp11
-rw-r--r--kernel/filesystem/src/inode.cpp108
-rw-r--r--kernel/filesystem/src/inode_file.cpp35
-rw-r--r--kernel/filesystem/src/mount.cpp32
-rw-r--r--kernel/filesystem/src/open_file_description.cpp35
-rw-r--r--kernel/filesystem/src/vfs.cpp123
23 files changed, 0 insertions, 1001 deletions
diff --git a/kernel/filesystem/CMakeLists.txt b/kernel/filesystem/CMakeLists.txt
deleted file mode 100644
index bb2090a..0000000
--- a/kernel/filesystem/CMakeLists.txt
+++ /dev/null
@@ -1,43 +0,0 @@
-add_library("kernel_filesystem" STATIC)
-add_library("kernel::filesystem" ALIAS "kernel_filesystem")
-
-target_sources("kernel_filesystem" PRIVATE
- "src/ext2/ext2_filesystem.cpp"
- "src/custody.cpp"
- "src/device_file.cpp"
- "src/file_descriptor_table.cpp"
- "src/filesystem.cpp"
- "src/inode_file.cpp"
- "src/inode.cpp"
- "src/mount.cpp"
- "src/open_file_description.cpp"
- "src/vfs.cpp"
-)
-
-target_sources("kernel_filesystem" PUBLIC
- FILE_SET HEADERS
- BASE_DIRS "include"
- FILES
- "include/filesystem/ext2/ext2_filesystem.hpp"
- "include/filesystem/custody.hpp"
- "include/filesystem/device_file.hpp"
- "include/filesystem/file_descriptor_table.hpp"
- "include/filesystem/file.hpp"
- "include/filesystem/filesystem.hpp"
- "include/filesystem/inode_file.hpp"
- "include/filesystem/inode_metadata.hpp"
- "include/filesystem/inode.hpp"
- "include/filesystem/mount.hpp"
- "include/filesystem/open_file_description.hpp"
- "include/filesystem/vfs.hpp"
-)
-
-target_include_directories("kernel_filesystem" PUBLIC
- "include"
-)
-
-target_link_libraries("kernel_filesystem" PUBLIC
- "kernel::devices"
-PRIVATE
- "os::kapi"
-)
diff --git a/kernel/filesystem/include/filesystem/custody.hpp b/kernel/filesystem/include/filesystem/custody.hpp
deleted file mode 100644
index 0124eb6..0000000
--- a/kernel/filesystem/include/filesystem/custody.hpp
+++ /dev/null
@@ -1,23 +0,0 @@
-#ifndef TEACH_OS_KERNEL_CUSTODY_HPP
-#define TEACH_OS_KERNEL_CUSTODY_HPP
-
-#include "filesystem/inode.hpp"
-
-#include <kstd/memory>
-
-namespace filesystem
-{
- struct custody
- {
- custody(kstd::shared_ptr<custody> const & parent, kstd::shared_ptr<inode> const & node);
-
- [[nodiscard]] auto get_inode() const -> kstd::shared_ptr<inode> const &;
- [[nodiscard]] auto get_parent() const -> kstd::shared_ptr<custody> const &;
-
- private:
- kstd::shared_ptr<custody> m_parent;
- kstd::shared_ptr<inode> m_inode;
- };
-} // namespace filesystem
-
-#endif \ No newline at end of file
diff --git a/kernel/filesystem/include/filesystem/device_file.hpp b/kernel/filesystem/include/filesystem/device_file.hpp
deleted file mode 100644
index dad4ea5..0000000
--- a/kernel/filesystem/include/filesystem/device_file.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef TEACH_OS_KERNEL_FILESYSTEM_DEVICE_FILE_HPP
-#define TEACH_OS_KERNEL_FILESYSTEM_DEVICE_FILE_HPP
-
-#include "devices/block_device.hpp"
-#include "devices/device.hpp"
-#include "filesystem/file.hpp"
-
-#include <kstd/memory>
-
-#include <cstddef>
-
-namespace filesystem
-{
- struct device_file : file
- {
- explicit device_file(kstd::shared_ptr<devices::device> const & device);
-
- auto open() -> void override;
-
- auto read(void * buffer, size_t offset, size_t size) const -> size_t override;
- auto write(void const * buffer, size_t offset, size_t size) -> size_t override;
-
- private:
- using block_op = void (*)(size_t idx, size_t off, size_t len, size_t done, devices::block_device * device,
- std::byte * scratch, void * buffer);
- auto process_blocks(size_t offset, size_t size, void * buffer, block_op op) const -> size_t;
-
- kstd::shared_ptr<devices::device> m_device;
- };
-} // namespace filesystem
-
-#endif
diff --git a/kernel/filesystem/include/filesystem/ext2/ext2_filesystem.hpp b/kernel/filesystem/include/filesystem/ext2/ext2_filesystem.hpp
deleted file mode 100644
index 37448a1..0000000
--- a/kernel/filesystem/include/filesystem/ext2/ext2_filesystem.hpp
+++ /dev/null
@@ -1,24 +0,0 @@
-#ifndef TEACH_OS_KERNEL_FILESYSTEM_EXT2_FILESYSTEM_HPP
-#define TEACH_OS_KERNEL_FILESYSTEM_EXT2_FILESYSTEM_HPP
-
-#include "devices/device.hpp"
-#include "filesystem/filesystem.hpp"
-#include "filesystem/inode.hpp"
-
-#include <kstd/memory>
-
-#include <string_view>
-
-namespace filesystem::ext2
-{
- struct ext2_filesystem : filesystem
- {
- auto mount(kstd::shared_ptr<devices::device> const & device) -> int override;
- auto lookup(inode const & parent, std::string_view name) -> inode * override;
-
- private:
- kstd::shared_ptr<devices::device> m_device{};
- };
-} // namespace filesystem::ext2
-
-#endif
diff --git a/kernel/filesystem/include/filesystem/file.hpp b/kernel/filesystem/include/filesystem/file.hpp
deleted file mode 100644
index e7e1b12..0000000
--- a/kernel/filesystem/include/filesystem/file.hpp
+++ /dev/null
@@ -1,19 +0,0 @@
-#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
deleted file mode 100644
index 6d78532..0000000
--- a/kernel/filesystem/include/filesystem/file_descriptor_table.hpp
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifndef TEACH_OS_KERNEL_FILESYSTEM_FILE_DESCRIPTOR_TABLE_HPP
-#define TEACH_OS_KERNEL_FILESYSTEM_FILE_DESCRIPTOR_TABLE_HPP
-
-#include "open_file_description.hpp"
-
-#include <kstd/vector>
-
-#include <optional>
-
-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;
- [[nodiscard]] auto get_file(int fd) const -> std::optional<open_file_description>;
- auto remove_file(int fd) -> void;
-
- private:
- file_descriptor_table() = default;
-
- // TODO BA-FS26 use kstd::shared_ptr when available
- kstd::vector<std::optional<open_file_description>> m_open_files{};
- };
-} // namespace filesystem
-
-#endif \ No newline at end of file
diff --git a/kernel/filesystem/include/filesystem/filesystem.hpp b/kernel/filesystem/include/filesystem/filesystem.hpp
deleted file mode 100644
index 934f883..0000000
--- a/kernel/filesystem/include/filesystem/filesystem.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-#ifndef TEACH_OS_KERNEL_FILESYSTEM_FILESYSTEM_HPP
-#define TEACH_OS_KERNEL_FILESYSTEM_FILESYSTEM_HPP
-
-#include "devices/device.hpp"
-#include "filesystem/inode.hpp"
-
-#include <kstd/memory>
-
-#include <string_view>
-
-namespace filesystem
-{
- struct filesystem
- {
- virtual ~filesystem() = default;
-
- virtual auto mount(kstd::shared_ptr<devices::device> const & device) -> int = 0;
- virtual auto lookup(inode const & parent, std::string_view name) -> inode * = 0;
-
- [[nodiscard]] auto root_inode() const -> inode const &;
-
- protected:
- inode m_root_inode{}; // TODO BA-FS26 set during mount?
- };
-
-} // namespace filesystem
-
-#endif \ No newline at end of file
diff --git a/kernel/filesystem/include/filesystem/inode.hpp b/kernel/filesystem/include/filesystem/inode.hpp
deleted file mode 100644
index abfe2cf..0000000
--- a/kernel/filesystem/include/filesystem/inode.hpp
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef TEACH_OS_KERNEL_FILESYSTEM_INODE_HPP
-#define TEACH_OS_KERNEL_FILESYSTEM_INODE_HPP
-
-#include "devices/device.hpp"
-#include "filesystem/inode_metadata.hpp"
-
-#include <kstd/memory>
-
-#include <cstddef>
-
-namespace filesystem
-{
- struct inode
- {
- inode() = default;
- explicit inode(inode_kind kind);
- explicit inode(kstd::shared_ptr<devices::device> const & device);
-
- [[nodiscard]] auto metadata() const -> inode_metadata;
-
- [[nodiscard]] auto is_directory() const -> bool;
- [[nodiscard]] auto is_regular() const -> bool;
- [[nodiscard]] auto is_device() const -> bool;
- [[nodiscard]] auto is_block_device() const -> bool;
- [[nodiscard]] auto major_device() const -> size_t;
- [[nodiscard]] auto minor_device() const -> size_t;
- [[nodiscard]] auto backing_device() const -> kstd::shared_ptr<devices::device> const &;
-
- auto read(void * buffer, size_t offset, size_t size) const -> size_t;
- auto write(void const * buffer, size_t offset, size_t size) -> size_t;
-
- private:
- inode_kind m_kind{inode_kind::regular};
- kstd::shared_ptr<devices::device> m_device{};
- };
-} // namespace filesystem
-
-#endif
diff --git a/kernel/filesystem/include/filesystem/inode_file.hpp b/kernel/filesystem/include/filesystem/inode_file.hpp
deleted file mode 100644
index 5f8a95e..0000000
--- a/kernel/filesystem/include/filesystem/inode_file.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-#ifndef TEACH_OS_KERNEL_FILESYSTEM_INODE_FILE_HPP
-#define TEACH_OS_KERNEL_FILESYSTEM_INODE_FILE_HPP
-
-#include "filesystem/file.hpp"
-#include "filesystem/inode.hpp"
-
-#include <kstd/memory>
-
-#include <cstddef>
-
-namespace filesystem
-{
- struct inode_file : file
- {
- explicit inode_file(kstd::shared_ptr<inode> const & inode);
-
- auto open() -> void override;
-
- auto read(void * buffer, size_t offset, size_t size) const -> size_t override;
- auto write(void const * buffer, size_t offset, size_t size) -> size_t override;
-
- private:
- kstd::shared_ptr<inode> m_inode;
- };
-} // namespace filesystem
-
-#endif \ No newline at end of file
diff --git a/kernel/filesystem/include/filesystem/inode_metadata.hpp b/kernel/filesystem/include/filesystem/inode_metadata.hpp
deleted file mode 100644
index ed5a09d..0000000
--- a/kernel/filesystem/include/filesystem/inode_metadata.hpp
+++ /dev/null
@@ -1,24 +0,0 @@
-#ifndef TEACH_OS_KERNEL_FILESYSTEM_INODE_METADATA_HPP
-#define TEACH_OS_KERNEL_FILESYSTEM_INODE_METADATA_HPP
-
-#include <cstddef>
-#include <optional>
-
-namespace filesystem
-{
- enum class inode_kind
- {
- regular,
- directory,
- device
- };
-
- struct inode_metadata
- {
- inode_kind kind{inode_kind::regular};
- std::optional<size_t> major{};
- std::optional<size_t> minor{};
- };
-} // namespace filesystem
-
-#endif // TEACH_OS_KERNEL_FILESYSTEM_INODE_METADATA_HPP \ No newline at end of file
diff --git a/kernel/filesystem/include/filesystem/mount.hpp b/kernel/filesystem/include/filesystem/mount.hpp
deleted file mode 100644
index 46a68e2..0000000
--- a/kernel/filesystem/include/filesystem/mount.hpp
+++ /dev/null
@@ -1,25 +0,0 @@
-#ifndef TEACH_OS_KERNEL_FILESYSTEM_MOUNT_HPP
-#define TEACH_OS_KERNEL_FILESYSTEM_MOUNT_HPP
-
-#include "filesystem/filesystem.hpp"
-
-#include <kstd/memory>
-
-#include <string_view>
-
-namespace filesystem
-{
- struct mount
- {
- mount(std::string_view const & path, kstd::shared_ptr<filesystem> const & fs);
-
- [[nodiscard]] auto path() const -> std::string_view;
- [[nodiscard]] auto get_filesystem() const -> kstd::shared_ptr<filesystem> const &;
-
- private:
- std::string_view m_path;
- kstd::shared_ptr<filesystem> m_filesystem{};
- };
-} // namespace filesystem
-
-#endif
diff --git a/kernel/filesystem/include/filesystem/open_file_description.hpp b/kernel/filesystem/include/filesystem/open_file_description.hpp
deleted file mode 100644
index 5ff094d..0000000
--- a/kernel/filesystem/include/filesystem/open_file_description.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-#ifndef TEACH_OS_KERNEL_FILESYSTEM_OPEN_FILE_DESCRIPTION_HPP
-#define TEACH_OS_KERNEL_FILESYSTEM_OPEN_FILE_DESCRIPTION_HPP
-
-#include "file.hpp"
-
-#include <kstd/memory>
-
-#include <cstddef>
-
-namespace filesystem
-{
- struct open_file_description
- {
- open_file_description(kstd::shared_ptr<file> const & file);
-
- ~open_file_description() = default;
-
- auto read(void * buffer, size_t size) -> size_t;
- auto write(void const * buffer, size_t size) -> size_t;
-
- private:
- kstd::shared_ptr<file> m_file;
- size_t m_offset;
- };
-
-} // namespace filesystem
-
-#endif \ No newline at end of file
diff --git a/kernel/filesystem/include/filesystem/vfs.hpp b/kernel/filesystem/include/filesystem/vfs.hpp
deleted file mode 100644
index e16a961..0000000
--- a/kernel/filesystem/include/filesystem/vfs.hpp
+++ /dev/null
@@ -1,46 +0,0 @@
-#ifndef TEACH_OS_KERNEL_FILESYSTEM_VFS_HPP
-#define TEACH_OS_KERNEL_FILESYSTEM_VFS_HPP
-
-#include "devices/device.hpp"
-#include "filesystem/custody.hpp"
-#include "filesystem/ext2/ext2_filesystem.hpp"
-#include "filesystem/inode.hpp"
-#include "filesystem/mount.hpp"
-#include "filesystem/open_file_description.hpp"
-
-#include <kstd/memory>
-#include <kstd/vector>
-
-#include <optional>
-#include <string_view>
-
-namespace filesystem
-{
- struct vfs
- {
- auto static init() -> void;
- auto static get() -> vfs &;
-
- ~vfs() = default;
-
- auto open(std::string_view path) -> std::optional<open_file_description>;
-
- private:
- struct device_node_entry
- {
- std::string_view name;
- kstd::shared_ptr<inode> node;
- };
-
- vfs() = default;
- auto make_device_node(kstd::shared_ptr<devices::device> const & device) -> void;
- [[nodiscard]] auto resolve_path(std::string_view path) -> std::optional<custody>;
-
- kstd::shared_ptr<ext2::ext2_filesystem> m_root_fs;
- std::optional<mount> m_root_mount;
- // kstd::vector<mount> m_mounts; // TODO BA-FS26 really needed?
- kstd::vector<std::optional<device_node_entry>> m_device_nodes; // TODO BA-FS26 remove again, use devtempfs
- };
-} // namespace filesystem
-
-#endif \ No newline at end of file
diff --git a/kernel/filesystem/src/custody.cpp b/kernel/filesystem/src/custody.cpp
deleted file mode 100644
index 3a87345..0000000
--- a/kernel/filesystem/src/custody.cpp
+++ /dev/null
@@ -1,30 +0,0 @@
-#include "filesystem/custody.hpp"
-
-#include "kapi/system.hpp"
-
-#include "filesystem/inode.hpp"
-
-#include <kstd/memory>
-
-namespace filesystem
-{
- custody::custody(kstd::shared_ptr<custody> const & parent, kstd::shared_ptr<inode> const & node)
- : m_parent(parent)
- , m_inode(node)
- {
- if (!m_inode)
- {
- kapi::system::panic("[FILESYSTEM] custody constructed with null inode.");
- }
- }
-
- auto custody::get_inode() const -> kstd::shared_ptr<inode> const &
- {
- return m_inode;
- }
-
- auto custody::get_parent() const -> kstd::shared_ptr<custody> const &
- {
- return m_parent;
- }
-} // namespace filesystem \ No newline at end of file
diff --git a/kernel/filesystem/src/device_file.cpp b/kernel/filesystem/src/device_file.cpp
deleted file mode 100644
index 8fc159a..0000000
--- a/kernel/filesystem/src/device_file.cpp
+++ /dev/null
@@ -1,124 +0,0 @@
-#include "filesystem/device_file.hpp"
-
-#include "kapi/system.hpp"
-
-#include "devices/block_device.hpp"
-#include "devices/device.hpp"
-
-#include <kstd/cstring>
-#include <kstd/memory>
-#include <kstd/vector>
-
-#include <algorithm>
-#include <cstddef>
-
-namespace filesystem
-{
- device_file::device_file(kstd::shared_ptr<devices::device> const & device)
- : m_device(device)
- {
- if (!m_device)
- {
- kapi::system::panic("[FILESYSTEM] device_file constructed with null device.");
- }
- }
-
- auto device_file::open() -> void
- {
- // Hook point for permission checks or lazy metadata loading.
- }
-
- auto device_file::read(void * buffer, size_t offset, size_t size) const -> size_t
- {
- if (m_device->is_block_device())
- {
- return process_blocks(offset, size, buffer,
- [](size_t idx, size_t off, size_t len, size_t done, devices::block_device * device,
- std::byte * scratch, void * buffer) {
- auto * out = static_cast<std::byte *>(buffer);
- if (off == 0 && len == device->block_size())
- {
- device->read_block(idx, out + done);
- }
- else
- {
- device->read_block(idx, scratch);
- kstd::libc::memcpy(out + done, scratch + off, len);
- }
- });
- }
- else
- {
- kapi::system::panic("[FILESYSTEM] device_file::read called on non-block device.");
- }
- }
-
- auto device_file::write(void const * buffer, size_t offset, size_t size) -> size_t
- {
- if (m_device->is_block_device())
- {
- return process_blocks(offset, size, const_cast<void *>(buffer),
- [](size_t idx, size_t off, size_t len, size_t done, devices::block_device * device,
- std::byte * scratch, void * buffer) {
- auto const * in = static_cast<std::byte const *>(buffer);
- if (off == 0 && len == device->block_size())
- {
- device->write_block(idx, in + done);
- }
- else
- {
- device->read_block(idx, scratch);
- kstd::libc::memcpy(scratch + off, in + done, len);
- device->write_block(idx, scratch);
- }
- });
- }
- else
- {
- kapi::system::panic("[FILESYSTEM] device_file::write called on non-block device.");
- }
- }
-
- auto device_file::process_blocks(size_t offset, size_t size, void * buffer, block_op op) const -> size_t
- {
- if (buffer == nullptr)
- {
- kapi::system::panic("[FILESYSTEM] device_file::write called with null buffer.");
- }
-
- if (size == 0)
- {
- return 0;
- }
-
- auto * block_dev = static_cast<devices::block_device *>(m_device.get());
- if (block_dev == nullptr)
- {
- kapi::system::panic("[FILESYSTEM] device_file: expected block_device.");
- }
-
- size_t const block_size = block_dev->block_size();
- size_t const capacity = block_dev->capacity();
-
- if (offset >= capacity)
- return 0;
- size_t const total_to_process = std::min(size, capacity - offset);
-
- kstd::vector<std::byte> scratch_buffer{block_size};
- auto processed = 0uz;
-
- while (processed < total_to_process)
- {
- size_t const absolute_offset = offset + processed;
- size_t const block_index = absolute_offset / block_size;
- size_t const in_block_offset = absolute_offset % block_size;
- size_t const chunk_size = std::min(total_to_process - processed, block_size - in_block_offset);
-
- op(block_index, in_block_offset, chunk_size, processed, block_dev, scratch_buffer.data(), buffer);
-
- processed += chunk_size;
- }
-
- return processed;
- }
-} // namespace filesystem
diff --git a/kernel/filesystem/src/ext2/ext2_filesystem.cpp b/kernel/filesystem/src/ext2/ext2_filesystem.cpp
deleted file mode 100644
index a82a098..0000000
--- a/kernel/filesystem/src/ext2/ext2_filesystem.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-#include "filesystem/ext2/ext2_filesystem.hpp"
-
-#include "devices/device.hpp"
-#include "filesystem/inode.hpp"
-#include "filesystem/inode_metadata.hpp"
-
-#include <kstd/memory>
-
-#include <string_view>
-
-namespace filesystem::ext2
-{
- auto ext2_filesystem::mount(kstd::shared_ptr<devices::device> const & device) -> int
- {
- if (!device)
- {
- return -1; // TODO BA-FS26 panic or errorcode?
- }
-
- m_device = device;
- // TODO BA-FS26 load proper root inode from ext2 metadata
- m_root_inode = inode{inode_kind::directory};
-
- // TODO BA-FS26 implement
- return 0;
- }
-
- auto ext2_filesystem::lookup(inode const & /*parent*/, std::string_view /*name*/) -> inode *
- {
- // TODO BA-FS26 implement ext2 directory traversal and inode loading
- return nullptr;
- }
-} // namespace filesystem::ext2
diff --git a/kernel/filesystem/src/file_descriptor_table.cpp b/kernel/filesystem/src/file_descriptor_table.cpp
deleted file mode 100644
index 64fad0c..0000000
--- a/kernel/filesystem/src/file_descriptor_table.cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-#include "filesystem/file_descriptor_table.hpp"
-
-#include "kapi/system.hpp"
-
-#include "filesystem/open_file_description.hpp"
-
-#include <algorithm>
-#include <cstddef>
-#include <optional>
-
-namespace filesystem
-{
- namespace
- {
- constinit auto static global_file_descriptor_table = std::optional<file_descriptor_table>{};
- } // namespace
-
- auto file_descriptor_table::init() -> void
- {
- if (global_file_descriptor_table)
- {
- kapi::system::panic("[FILESYSTEM] File descriptor table has already been initialized.");
- }
-
- global_file_descriptor_table.emplace(file_descriptor_table{});
- }
-
- auto file_descriptor_table::get() -> file_descriptor_table &
- {
- if (!global_file_descriptor_table)
- {
- kapi::system::panic("[FILESYSTEM] File descriptor table has not been initialized.");
- }
-
- return *global_file_descriptor_table;
- }
-
- auto file_descriptor_table::add_file(open_file_description & file_description) -> int
- {
- auto it = std::ranges::find_if(m_open_files, [](auto & open_file) { return !open_file.has_value(); });
- if (it != m_open_files.end())
- {
- *it = file_description;
- return static_cast<int>(it - m_open_files.begin());
- }
-
- m_open_files.push_back(file_description);
- return static_cast<int>(m_open_files.size() - 1);
- }
-
- auto file_descriptor_table::get_file(int fd) const -> std::optional<open_file_description>
- {
- if (fd < 0)
- {
- return std::nullopt;
- }
-
- auto const index = static_cast<size_t>(fd);
- if (index >= m_open_files.size() || !m_open_files.at(fd).has_value())
- {
- return std::nullopt;
- }
-
- return m_open_files.at(fd);
- }
-
- auto file_descriptor_table::remove_file(int fd) -> void
- {
- if (fd < 0)
- {
- return;
- }
-
- auto const index = static_cast<size_t>(fd);
- if (index >= m_open_files.size())
- {
- return;
- }
-
- m_open_files.at(fd).reset();
- }
-} // namespace filesystem \ No newline at end of file
diff --git a/kernel/filesystem/src/filesystem.cpp b/kernel/filesystem/src/filesystem.cpp
deleted file mode 100644
index cdfe7f8..0000000
--- a/kernel/filesystem/src/filesystem.cpp
+++ /dev/null
@@ -1,11 +0,0 @@
-#include "filesystem/filesystem.hpp"
-
-#include "filesystem/inode.hpp"
-
-namespace filesystem
-{
- auto filesystem::root_inode() const -> inode const &
- {
- return m_root_inode;
- }
-} // namespace filesystem \ No newline at end of file
diff --git a/kernel/filesystem/src/inode.cpp b/kernel/filesystem/src/inode.cpp
deleted file mode 100644
index 231ee33..0000000
--- a/kernel/filesystem/src/inode.cpp
+++ /dev/null
@@ -1,108 +0,0 @@
-#include "filesystem/inode.hpp"
-
-#include "kapi/system.hpp"
-
-#include "devices/device.hpp"
-#include "filesystem/inode_metadata.hpp"
-
-#include <kstd/memory>
-
-#include <cstddef>
-
-namespace filesystem
-{
- inode::inode(inode_kind kind)
- : m_kind(kind)
- {}
-
- inode::inode(kstd::shared_ptr<devices::device> const & device)
- : m_kind(inode_kind::device)
- , m_device(device)
- {
- if (!m_device)
- {
- kapi::system::panic("[FILESYSTEM] inode constructed with null device.");
- }
- }
-
- auto inode::metadata() const -> inode_metadata
- {
- auto meta = inode_metadata{};
- meta.kind = m_kind;
-
- if (is_device())
- {
- meta.major = m_device->major();
- meta.minor = m_device->minor();
- }
-
- return meta;
- }
-
- auto inode::is_directory() const -> bool
- {
- return m_kind == inode_kind::directory;
- }
-
- auto inode::is_regular() const -> bool
- {
- return m_kind == inode_kind::regular;
- }
-
- auto inode::is_device() const -> bool
- {
- return m_kind == inode_kind::device;
- }
-
- auto inode::is_block_device() const -> bool
- {
- return is_device() && m_device->is_block_device();
- }
-
- auto inode::major_device() const -> size_t
- {
- if (!is_device())
- {
- kapi::system::panic("[FILESYSTEM] inode::major_device called on non-device inode.");
- }
-
- return m_device->major();
- }
-
- auto inode::minor_device() const -> size_t
- {
- if (!is_device())
- {
- kapi::system::panic("[FILESYSTEM] inode::minor_device called on non-device inode.");
- }
-
- return m_device->minor();
- }
-
- auto inode::backing_device() const -> kstd::shared_ptr<devices::device> const &
- {
- return m_device;
- }
-
- auto inode::read(void * /*buffer*/, size_t /*offset*/, size_t /*size*/) const -> size_t
- {
- if (is_device())
- {
- kapi::system::panic("[FILESYSTEM] inode::read called on device inode. Open it as a device file first.");
- }
-
- // TODO BA-FS26
- return 0;
- }
-
- auto inode::write(void const *, size_t, size_t) -> size_t
- {
- if (is_device())
- {
- kapi::system::panic("[FILESYSTEM] inode::write called on device inode. Open it as a device file first.");
- }
-
- kapi::system::panic("[FILESYSTEM] inode::write is not implemented yet");
- return 0;
- }
-} // namespace filesystem \ No newline at end of file
diff --git a/kernel/filesystem/src/inode_file.cpp b/kernel/filesystem/src/inode_file.cpp
deleted file mode 100644
index 0b8bdf9..0000000
--- a/