#include #include #include #include #include #include #include #include #include #include namespace kapi::filesystem { auto mount(std::string_view source, std::string_view target) -> std::expected { return kernel::filesystem::vfs::get().mount(source, target); } auto umount(std::string_view target) -> std::expected { return kernel::filesystem::vfs::get().unmount(target); } auto open(std::string_view path) -> std::expected { return kernel::filesystem::vfs::get().open(path).and_then([](auto dentry) { auto open_file_descriptor = kstd::make_shared(dentry); return kernel::filesystem::open_file_table::get().add_file(open_file_descriptor); }); } auto close(size_t file_descriptor) -> std::expected { return kernel::filesystem::open_file_table::get() .file(file_descriptor) .transform([](auto file) { return file->get_dentry()->absolute_path(); }) .and_then([](auto path) { return kernel::filesystem::vfs::get().close(path); }) .and_then([=]() { return kernel::filesystem::open_file_table::get().remove_file(file_descriptor); }); } auto read(size_t file_descriptor, void * buffer, size_t size) -> std::expected { return kernel::filesystem::open_file_table::get().file(file_descriptor).and_then([=](auto descriptor) { return descriptor->read(buffer, size); }); } auto write(size_t file_descriptor, void const * buffer, size_t size) -> std::expected { return kernel::filesystem::open_file_table::get().file(file_descriptor).and_then([=](auto descriptor) { return descriptor->write(buffer, size); }); } auto mkdir(std::string_view path) -> kstd::result { return kernel::filesystem::vfs::get().mkdir(path); } auto create(std::string_view path) -> kstd::result { return kernel::filesystem::vfs::get().create(path); } } // namespace kapi::filesystem