1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-16 19:05:08 +00:00

Kernel: Implement FIFOs/named pipes

This commit is contained in:
Peter Elliott 2020-07-16 15:23:03 -06:00 committed by Andreas Kling
parent 76e34968fa
commit d01eba6fa3
5 changed files with 69 additions and 0 deletions

View file

@ -292,6 +292,23 @@ KResultOr<NonnullRefPtr<FileDescription>> VFS::open(StringView path, int options
if (auto preopen_fd = inode.preopen_fd())
return *preopen_fd;
if (metadata.is_fifo()) {
if (options & O_WRONLY) {
auto description = inode.fifo().open_direction_blocking(FIFO::Direction::Writer);
description->set_rw_mode(options);
description->set_file_flags(options);
description->set_original_inode({}, inode);
return description;
} else if (options & O_RDONLY) {
auto description = inode.fifo().open_direction_blocking(FIFO::Direction::Reader);
description->set_rw_mode(options);
description->set_file_flags(options);
description->set_original_inode({}, inode);
return description;
}
return KResult(-EINVAL);
}
if (metadata.is_device()) {
if (custody.mount_flags() & MS_NODEV)
return KResult(-EACCES);