aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel Braun <marcel.braun@ost.ch>2026-03-28 19:16:27 +0100
committerMarcel Braun <marcel.braun@ost.ch>2026-03-28 19:16:27 +0100
commit2864e0b061f923a3c73c608b9c27ca4a7116e27c (patch)
tree7175be5fcaa789e0bfd6d0aeb4e7f6ac756cabf6
parent05269b10e50a80f557c2be475904ff15dc1bbec4 (diff)
parent8a9bf5a90b7f46d5c615b55a3fc418b419db4926 (diff)
downloadteachos-2864e0b061f923a3c73c608b9c27ca4a7116e27c.tar.xz
teachos-2864e0b061f923a3c73c608b9c27ca4a7116e27c.zip
Merge branch 'vfs' into 'develop-BA-FS26'
implement basic vfs See merge request teachos/kernel!16
-rw-r--r--.gitlab-ci.yml12
-rw-r--r--kernel/CMakeLists.txt12
-rw-r--r--kernel/include/kernel/devices/block_device.hpp5
-rw-r--r--kernel/include/kernel/devices/device.hpp9
-rw-r--r--kernel/include/kernel/filesystem/custody.hpp23
-rw-r--r--kernel/include/kernel/filesystem/dentry.hpp43
-rw-r--r--kernel/include/kernel/filesystem/devfs/devfs_filesystem.hpp25
-rw-r--r--kernel/include/kernel/filesystem/devfs/devfs_root_inode.hpp19
-rw-r--r--kernel/include/kernel/filesystem/device_inode.hpp (renamed from kernel/include/kernel/filesystem/device_file.hpp)16
-rw-r--r--kernel/include/kernel/filesystem/ext2/ext2_file.hpp15
-rw-r--r--kernel/include/kernel/filesystem/ext2/ext2_filesystem.hpp3
-rw-r--r--kernel/include/kernel/filesystem/ext2/ext2_inode.hpp25
-rw-r--r--kernel/include/kernel/filesystem/file.hpp19
-rw-r--r--kernel/include/kernel/filesystem/file_descriptor_table.hpp10
-rw-r--r--kernel/include/kernel/filesystem/filesystem.hpp11
-rw-r--r--kernel/include/kernel/filesystem/inode.hpp27
-rw-r--r--kernel/include/kernel/filesystem/inode_file.hpp27
-rw-r--r--kernel/include/kernel/filesystem/inode_metadata.hpp24
-rw-r--r--kernel/include/kernel/filesystem/mount.hpp14
-rw-r--r--kernel/include/kernel/filesystem/mount_table.hpp25
-rw-r--r--kernel/include/kernel/filesystem/open_file_description.hpp6
-rw-r--r--kernel/include/kernel/filesystem/rootfs/rootfs_filesystem.hpp23
-rw-r--r--kernel/include/kernel/filesystem/rootfs/rootfs_inode.hpp31
-rw-r--r--kernel/include/kernel/filesystem/vfs.hpp31
-rw-r--r--kernel/src/devices/block_device.cpp5
-rw-r--r--kernel/src/devices/device.cpp7
-rw-r--r--kernel/src/devices/storage/ram_disk/ram_disk_device.cpp15
-rw-r--r--kernel/src/filesystem/custody.cpp30
-rw-r--r--kernel/src/filesystem/dentry.cpp61
-rw-r--r--kernel/src/filesystem/devfs/devfs_filesystem.cpp58
-rw-r--r--kernel/src/filesystem/devfs/devfs_root_inode.cpp22
-rw-r--r--kernel/src/filesystem/device_inode.cpp (renamed from kernel/src/filesystem/device_file.cpp)32
-rw-r--r--kernel/src/filesystem/ext2/ext2_file.cpp20
-rw-r--r--kernel/src/filesystem/ext2/ext2_filesystem.cpp24
-rw-r--r--kernel/src/filesystem/ext2/ext2_inode.cpp24
-rw-r--r--kernel/src/filesystem/file_descriptor_table.cpp24
-rw-r--r--kernel/src/filesystem/filesystem.cpp15
-rw-r--r--kernel/src/filesystem/inode.cpp85
-rw-r--r--kernel/src/filesystem/inode_file.cpp35
-rw-r--r--kernel/src/filesystem/mount.cpp23
-rw-r--r--kernel/src/filesystem/mount_table.cpp38
-rw-r--r--kernel/src/filesystem/open_file_description.cpp14
-rw-r--r--kernel/src/filesystem/rootfs/rootfs_filesystem.cpp29
-rw-r--r--kernel/src/filesystem/rootfs/rootfs_inode.cpp39
-rw-r--r--kernel/src/filesystem/vfs.cpp146
-rw-r--r--kernel/src/main.cpp128
-rw-r--r--libs/kstd/CMakeLists.txt1
-rw-r--r--libs/kstd/include/kstd/bits/shared_ptr.hpp345
-rw-r--r--libs/kstd/include/kstd/string348
-rw-r--r--libs/kstd/tests/src/string.cpp445
50 files changed, 1977 insertions, 491 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 05bba19..2231956 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -27,18 +27,28 @@ bht:
image: registry.gitlab.ost.ch:45023/teachos/devcontainers/x86-64:15.2.0-4
before_script:
- apt update
- - apt install -y build-essential cmake ninja-build lcov libcatch2-dev
+ - apt install -y build-essential cmake ninja-build lcov libcatch2-dev gcovr
script:
- cmake --preset bht
- cmake --build --preset bht-dbg
- ctest --preset bht-dbg
- lcov --config-file .lcovrc --capture --directory $(pwd) --output-file coverage.info
- lcov --config-file .lcovrc --list coverage.info
+ - genhtml --prefix $(pwd) --output-directory coverage coverage.info
+ - gcovr --root . --cobertura-pretty --output coverage/cobertura-coverage.xml
+ after_script:
+ - echo "CoverageReport public URL - https://teachos.pages.ost.ch/-/kernel/-/jobs/$CI_JOB_ID/artifacts/coverage/index.html"
coverage: '/Total:\|\s*(\d+(\.\d+)?)\%/'
artifacts:
paths:
- coverage.info
+ - coverage/
expire_in: 24 hours
+ when: always
+ reports:
+ coverage_report:
+ coverage_format: cobertura
+ path: coverage/cobertura-coverage.xml
license_check:
stage: .pre
diff --git a/kernel/CMakeLists.txt b/kernel/CMakeLists.txt
index 398022c..eb762ac 100644
--- a/kernel/CMakeLists.txt
+++ b/kernel/CMakeLists.txt
@@ -21,15 +21,21 @@ add_executable("kernel"
"src/devices/storage/storage_management.cpp"
"src/devices/storage/ram_disk/ram_disk_controller.cpp"
"src/devices/storage/ram_disk/ram_disk_device.cpp"
+ "src/filesystem/devfs/devfs_filesystem.cpp"
+ "src/filesystem/devfs/devfs_root_inode.cpp"
+ "src/filesystem/ext2/ext2_file.cpp"
"src/filesystem/ext2/ext2_filesystem.cpp"
- "src/filesystem/custody.cpp"
- "src/filesystem/device_file.cpp"
+ "src/filesystem/ext2/ext2_inode.cpp"
+ "src/filesystem/dentry.cpp"
+ "src/filesystem/device_inode.cpp"
"src/filesystem/file_descriptor_table.cpp"
"src/filesystem/filesystem.cpp"
- "src/filesystem/inode_file.cpp"
"src/filesystem/inode.cpp"
+ "src/filesystem/mount_table.cpp"
"src/filesystem/mount.cpp"
"src/filesystem/open_file_description.cpp"
+ "src/filesystem/rootfs/rootfs_filesystem.cpp"
+ "src/filesystem/rootfs/rootfs_inode.cpp"
"src/filesystem/vfs.cpp"
)
diff --git a/kernel/include/kernel/devices/block_device.hpp b/kernel/include/kernel/devices/block_device.hpp
index fb7d104..e2026dd 100644
--- a/kernel/include/kernel/devices/block_device.hpp
+++ b/kernel/include/kernel/devices/block_device.hpp
@@ -3,8 +3,9 @@
#include "kernel/devices/device.hpp"
+#include <kstd/string>
+
#include <cstddef>
-#include <string_view>
namespace devices
{
@@ -20,7 +21,7 @@ namespace devices
* @param name Device name.
* @param block_size Size of one logical block in bytes.
*/
- block_device(size_t major, size_t minor, std::string_view name, size_t block_size);
+ block_device(size_t major, size_t minor, kstd::string const & name, size_t block_size);
/**
* @brief Read data from the block at @p block_index into @p buffer.
diff --git a/kernel/include/kernel/devices/device.hpp b/kernel/include/kernel/devices/device.hpp
index d6f520f..66cb7f8 100644
--- a/kernel/include/kernel/devices/device.hpp
+++ b/kernel/include/kernel/devices/device.hpp
@@ -1,8 +1,9 @@
#ifndef TEACH_OS_KERNEL_DEVICES_DEVICE_HPP
#define TEACH_OS_KERNEL_DEVICES_DEVICE_HPP
+#include <kstd/string>
+
#include <cstddef>
-#include <string_view>
namespace devices
{
@@ -17,7 +18,7 @@ namespace devices
* @param minor Device minor number.
* @param name Device name.
*/
- device(size_t major, size_t minor, std::string_view name);
+ device(size_t major, size_t minor, kstd::string const & name);
/**
* @brief Virtual destructor for device.
@@ -40,7 +41,7 @@ namespace devices
* @brief Returns the name of the device.
* @return Device name.
*/
- [[nodiscard]] auto name() const -> std::string_view;
+ [[nodiscard]] auto name() const -> kstd::string const &;
/**
* @brief Check if the device is a block device.
@@ -54,7 +55,7 @@ namespace devices
private:
size_t m_major;
size_t m_minor;
- std::string_view m_name;
+ kstd::string m_name;
};
} // namespace devices
diff --git a/kernel/include/kernel/filesystem/custody.hpp b/kernel/include/kernel/filesystem/custody.hpp
deleted file mode 100644
index 8a0e09a..0000000
--- a/kernel/include/kernel/filesystem/custody.hpp
+++ /dev/null
@@ -1,23 +0,0 @@
-#ifndef TEACH_OS_KERNEL_CUSTODY_HPP
-#define TEACH_OS_KERNEL_CUSTODY_HPP
-
-#include "kernel/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/include/kernel/filesystem/dentry.hpp b/kernel/include/kernel/filesystem/dentry.hpp
new file mode 100644
index 0000000..c28246f
--- /dev/null
+++ b/kernel/include/kernel/filesystem/dentry.hpp
@@ -0,0 +1,43 @@
+#ifndef TEACH_OS_KERNEL_FILESYSTEM_DENTRY_HPP
+#define TEACH_OS_KERNEL_FILESYSTEM_DENTRY_HPP
+
+#include "kernel/filesystem/inode.hpp"
+
+#include <kstd/memory>
+#include <kstd/string>
+#include <kstd/vector>
+
+#include <cstdint>
+#include <string_view>
+
+namespace filesystem
+{
+ struct dentry
+ {
+ enum class dentry_flags : uint32_t
+ {
+ dcache_mounted = 1 << 15
+ };
+
+ dentry(kstd::shared_ptr<dentry> const & parent, kstd::shared_ptr<inode> const & node, std::string_view name = {});
+
+ [[nodiscard]] auto get_inode() const -> kstd::shared_ptr<inode> const &;
+ [[nodiscard]] auto get_parent() const -> kstd::shared_ptr<dentry> const &;
+
+ auto add_child(kstd::shared_ptr<dentry> const & child) -> void;
+ [[nodiscard]] auto find_child(std::string_view name) const -> kstd::shared_ptr<dentry>;
+
+ auto set_flag(dentry_flags flag) -> void;
+ auto unset_flag(dentry_flags flag) -> void;
+ [[nodiscard]] auto has_flag(dentry_flags flag) const -> bool;
+
+ private:
+ kstd::string m_name;
+ kstd::shared_ptr<dentry> m_parent;
+ kstd::vector<kstd::shared_ptr<dentry>> m_children;
+ kstd::shared_ptr<inode> m_inode;
+ uint32_t m_flags{0};
+ };
+} // namespace filesystem
+
+#endif \ No newline at end of file
diff --git a/kernel/include/kernel/filesystem/devfs/devfs_filesystem.hpp b/kernel/include/kernel/filesystem/devfs/devfs_filesystem.hpp
new file mode 100644
index 0000000..5559c2a
--- /dev/null
+++ b/kernel/include/kernel/filesystem/devfs/devfs_filesystem.hpp
@@ -0,0 +1,25 @@
+#ifndef TEACH_OS_KERNEL_FILESYSTEM_DEVFS_DEVFS_FILESYSTEM_HPP
+#define TEACH_OS_KERNEL_FILESYSTEM_DEVFS_DEVFS_FILESYSTEM_HPP
+
+#include "kernel/devices/device.hpp"
+#include "kernel/filesystem/filesystem.hpp"
+#include "kernel/filesystem/inode.hpp"
+
+#include <kstd/memory>
+#include <kstd/vector>
+
+#include <string_view>
+
+namespace filesystem::devfs
+{
+ struct devfs_filesystem : filesystem
+ {
+ auto mount(kstd::shared_ptr<devices::device> const & device) -> int override;
+ auto lookup(kstd::shared_ptr<inode> const & parent, std::string_view name) -> kstd::shared_ptr<inode> override;
+
+ private:
+ auto build_device_inode_table() -> void;
+ };
+} // namespace filesystem::devfs
+
+#endif \ No newline at end of file
diff --git a/kernel/include/kernel/filesystem/devfs/devfs_root_inode.hpp b/kernel/include/kernel/filesystem/devfs/devfs_root_inode.hpp
new file mode 100644
index 0000000..b1d37ab
--- /dev/null
+++ b/kernel/include/kernel/filesystem/devfs/devfs_root_inode.hpp
@@ -0,0 +1,19 @@
+#ifndef TEACH_OS_KERNEL_FILESYSTEM_DEVFS_DEVFS_ROOT_INODE_HPP
+#define TEACH_OS_KERNEL_FILESYSTEM_DEVFS_DEVFS_ROOT_INODE_HPP
+
+#include "kernel/filesystem/inode.hpp"
+
+#include <cstddef>
+
+namespace filesystem::devfs
+{
+ struct devfs_root_inode : inode
+ {
+ devfs_root_inode();
+
+ 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;
+ };
+} // namespace filesystem::devfs
+
+#endif \ No newline at end of file
diff --git a/kernel/include/kernel/filesystem/device_file.hpp b/kernel/include/kernel/filesystem/device_inode.hpp
index 06aa9b2..1cf08d4 100644
--- a/kernel/include/kernel/filesystem/device_file.hpp
+++ b/kernel/include/kernel/filesystem/device_inode.hpp
@@ -1,9 +1,9 @@
-#ifndef TEACH_OS_KERNEL_FILESYSTEM_DEVICE_FILE_HPP
-#define TEACH_OS_KERNEL_FILESYSTEM_DEVICE_FILE_HPP
+#ifndef TEACH_OS_KERNEL_FILESYSTEM_DEVICE_INODE_HPP
+#define TEACH_OS_KERNEL_FILESYSTEM_DEVICE_INODE_HPP
#include "kernel/devices/block_device.hpp"
#include "kernel/devices/device.hpp"
-#include "kernel/filesystem/file.hpp"
+#include "kernel/filesystem/inode.hpp"
#include <kstd/memory>
@@ -11,15 +11,15 @@
namespace filesystem
{
- struct device_file : file
+ struct device_inode : inode
{
- explicit device_file(kstd::shared_ptr<devices::device> const & device);
-
- auto open() -> void override;
+ explicit device_inode(kstd::shared_ptr<devices::device> const & device);
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;
+ [[nodiscard]] auto device() const -> kstd::shared_ptr<devices::device> const &;
+
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);
@@ -29,4 +29,4 @@ namespace filesystem
};
} // namespace filesystem
-#endif
+#endif \ No newline at end of file
diff --git a/kernel/include/kernel/filesystem/ext2/ext2_file.hpp b/kernel/include/kernel/filesystem/ext2/ext2_file.hpp
new file mode 100644
index 0000000..e5357e3
--- /dev/null
+++ b/kernel/include/kernel/filesystem/ext2/ext2_file.hpp
@@ -0,0 +1,15 @@
+#ifndef TEACH_OS_KERNEL_FILESYSTEM_EXT2_FILE_HPP
+#define TEACH_OS_KERNEL_FILESYSTEM_EXT2_FILE_HPP
+
+#include <cstddef>
+
+namespace filesystem::ext2
+{
+ struct ext2_file
+ {
+ 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;
+ };
+} // namespace filesystem::ext2
+
+#endif \ No newline at end of file
diff --git a/kernel/include/kernel/filesystem/ext2/ext2_filesystem.hpp b/kernel/include/kernel/filesystem/ext2/ext2_filesystem.hpp
index d6f69c8..1445e5a 100644
--- a/kernel/include/kernel/filesystem/ext2/ext2_filesystem.hpp
+++ b/kernel/include/kernel/filesystem/ext2/ext2_filesystem.hpp
@@ -14,10 +14,9 @@ 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;
+ auto lookup(kstd::shared_ptr<inode> const & parent, std::string_view name) -> kstd::shared_ptr<inode> override;
private:
- kstd::shared_ptr<devices::device> m_device{};
};
} // namespace filesystem::ext2
diff --git a/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp b/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp
new file mode 100644
index 0000000..5f4d16a
--- /dev/null
+++ b/kernel/include/kernel/filesystem/ext2/ext2_inode.hpp
@@ -0,0 +1,25 @@
+#ifndef TEACH_OS_KERNEL_FILESYSTEM_EXT2_INODE_HPP
+#define TEACH_OS_KERNEL_FILESYSTEM_EXT2_INODE_HPP
+
+#include "kernel/filesystem/ext2/ext2_file.hpp"
+#include "kernel/filesystem/inode.hpp"
+
+#include <kstd/memory>
+
+#include <cstddef>
+
+namespace filesystem::ext2
+{
+ struct ext2_inode : inode
+ {
+ explicit ext2_inode();
+
+ 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<ext2_file> m_file;
+ };
+} // namespace filesystem::ext2
+
+#endif \ No newline at end of file
diff --git a/kernel/include/kernel/filesystem/file.hpp b/kernel/include/kernel/filesystem/file.hpp
deleted file mode 100644
index e7e1b12..0000000
--- a/kernel/include/kernel/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/include/kernel/filesystem/file_descriptor_table.hpp b/kernel/include/kernel/filesystem/file_descriptor_table.hpp
index 6d78532..bc6fb24 100644
--- a/kernel/include/kernel/filesystem/file_descriptor_table.hpp
+++ b/kernel/include/kernel/filesystem/file_descriptor_table.hpp
@@ -3,10 +3,9 @@
#include "open_file_description.hpp"
+#include <kstd/memory>
#include <kstd/vector>
-#include <optional>
-
namespace filesystem
{
struct file_descriptor_table
@@ -16,15 +15,14 @@ namespace filesystem
~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 add_file(kstd::shared_ptr<open_file_description> const & f) -> int;
+ [[nodiscard]] auto get_file(int fd) const -> kstd::shared_ptr<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{};
+ kstd::vector<kstd::shared_ptr<open_file_description>> m_open_files{};
};
} // namespace filesystem
diff --git a/kernel/include/kernel/filesystem/filesystem.hpp b/kernel/include/kernel/filesystem/filesystem.hpp
index 23924c4..e069ced 100644
--- a/kernel/include/kernel/filesystem/filesystem.hpp
+++ b/kernel/include/kernel/filesystem/filesystem.hpp
@@ -5,6 +5,7 @@
#include "kernel/filesystem/inode.hpp"
#include <kstd/memory>
+#include <kstd/vector>
#include <string_view>
@@ -14,13 +15,15 @@ namespace 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;
+ virtual auto mount(kstd::shared_ptr<devices::device> const & device) -> int;
+ virtual auto lookup(kstd::shared_ptr<inode> const & parent, std::string_view name) -> kstd::shared_ptr<inode> = 0;
- [[nodiscard]] auto root_inode() const -> inode const &;
+ [[nodiscard]] auto root_inode() const -> kstd::shared_ptr<inode> const &;
protected:
- inode m_root_inode{}; // TODO BA-FS26 set during mount?
+ kstd::shared_ptr<inode> m_root_inode{};
+ kstd::shared_ptr<devices::device> m_device{};
+ kstd::vector<kstd::shared_ptr<inode>> m_inodes{};
};
} // namespace filesystem
diff --git a/kernel/include/kernel/filesystem/inode.hpp b/kernel/include/kernel/filesystem/inode.hpp
index a2955f9..6d8f0d4 100644
--- a/kernel/include/kernel/filesystem/inode.hpp
+++ b/kernel/include/kernel/filesystem/inode.hpp
@@ -1,37 +1,32 @@
#ifndef TEACH_OS_KERNEL_FILESYSTEM_INODE_HPP
#define TEACH_OS_KERNEL_FILESYSTEM_INODE_HPP
-#include "kernel/devices/device.hpp"
-#include "kernel/filesystem/inode_metadata.hpp"
-
-#include <kstd/memory>
-
#include <cstddef>
namespace filesystem
{
struct inode
{
- inode() = default;
+ enum class inode_kind
+ {
+ regular,
+ directory,
+ device
+ };
+
explicit inode(inode_kind kind);
- explicit inode(kstd::shared_ptr<devices::device> const & device);
- [[nodiscard]] auto metadata() const -> inode_metadata;
+ virtual ~inode() = default;
+
+ 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;
[[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
diff --git a/kernel/include/kernel/filesystem/inode_file.hpp b/kernel/include/kernel/filesystem/inode_file.hpp
deleted file mode 100644
index ee84eee..0000000
--- a/kernel/include/kernel/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 "kernel/filesystem/file.hpp"
-#include "kernel/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/include/kernel/filesystem/inode_metadata.hpp b/kernel/include/kernel/filesystem/inode_metadata.hpp
deleted file mode 100644
index ed5a09d..0000000
--- a/kernel/include/kernel/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/include/kernel/filesystem/mount.hpp b/kernel/include/kernel/filesystem/mount.hpp
index 232a9be..0f37687 100644
--- a/kernel/include/kernel/filesystem/mount.hpp
+++ b/kernel/include/kernel/filesystem/mount.hpp
@@ -1,9 +1,11 @@
#ifndef TEACH_OS_KERNEL_FILESYSTEM_MOUNT_HPP
#define T