#include #include #include #include #include #include #include #include #include #include namespace kapi::filesystem { auto mount(std::string_view source, std::string_view target) -> kstd::result { return kernel::vfs::vfs::get().mount(source, target); } auto umount(std::string_view target) -> kstd::result { return kernel::vfs::vfs::get().unmount(target); } auto open(std::string_view path) -> kstd::result { return kernel::vfs::vfs::get() .open(path) .transform([](auto dentry) -> kstd::shared_ptr { if (dentry->inode()->is_directory()) { return kstd::make_shared(dentry); } return kstd::make_shared(dentry); }) .and_then([](auto file_descriptor) { return kernel::vfs::open_file_table::get().add_file(file_descriptor); }); } auto close(std::size_t file_descriptor) -> kstd::result { return kernel::vfs::open_file_table::get() .file(file_descriptor) .transform([](auto file) { return file->get_dentry()->absolute_path(); }) .and_then([](auto path) { return kernel::vfs::vfs::get().close(path); }) .and_then([=]() { return kernel::vfs::open_file_table::get().remove_file(file_descriptor); }); } auto read(std::size_t file_descriptor, std::span buffer) -> kstd::result { return kernel::vfs::open_file_table::get().file(file_descriptor).and_then([=](auto descriptor) { return descriptor->read(buffer); }); } auto write(std::size_t file_descriptor, std::span buffer) -> kstd::result { return kernel::vfs::open_file_table::get().file(file_descriptor).and_then([=](auto descriptor) { return descriptor->write(buffer); }); } auto seek(std::size_t file_descriptor, kstd::offset offset, seek_origin origin) -> kstd::result { return kernel::vfs::open_file_table::get().file(file_descriptor).and_then([=](auto file) { return file->seek(offset, origin); }); } auto mkdir(std::string_view path) -> kstd::result { return kernel::vfs::vfs::get().mkdir(path); } auto create(std::string_view path) -> kstd::result { return kernel::vfs::vfs::get().create(path); } auto status(std::string_view path) -> kstd::result { return kernel::vfs::vfs::get().status(path); } auto create_device_node(std::string_view path, file_type type, device_number number) -> kstd::result { return kernel::vfs::vfs::get().create_device_node(path, static_cast(type), number); } auto read_directory(std::size_t file_descriptor, std::span buffer) -> kstd::result { return kernel::vfs::open_file_table::get().file(file_descriptor).and_then([=](auto file) { return file->read_directory(buffer); }); } } // namespace kapi::filesystem