mirror of
https://github.com/asterinas/asterinas.git
synced 2025-06-23 17:33:23 +00:00
Support the close-on-exec file descriptor flag
This commit is contained in:
committed by
Tate, Hongliang Tian
parent
a6bb7c7bf5
commit
3de5c42afd
@ -3,9 +3,9 @@
|
||||
use super::{SyscallReturn, SYS_PIPE2};
|
||||
use crate::{
|
||||
fs::{
|
||||
file_table::FileDescripter,
|
||||
file_table::{FdFlags, FileDescripter},
|
||||
pipe::{PipeReader, PipeWriter},
|
||||
utils::{Channel, StatusFlags},
|
||||
utils::{Channel, CreationFlags, StatusFlags},
|
||||
},
|
||||
log_syscall_entry,
|
||||
prelude::*,
|
||||
@ -27,11 +27,16 @@ pub fn sys_pipe2(fds: Vaddr, flags: u32) -> Result<SyscallReturn> {
|
||||
};
|
||||
let pipe_reader = Arc::new(reader);
|
||||
let pipe_writer = Arc::new(writer);
|
||||
let fd_flags = if CreationFlags::from_bits_truncate(flags).contains(CreationFlags::O_CLOEXEC) {
|
||||
FdFlags::CLOEXEC
|
||||
} else {
|
||||
FdFlags::empty()
|
||||
};
|
||||
|
||||
let current = current!();
|
||||
let mut file_table = current.file_table().lock();
|
||||
pipe_fds.reader_fd = file_table.insert(pipe_reader);
|
||||
pipe_fds.writer_fd = file_table.insert(pipe_writer);
|
||||
pipe_fds.reader_fd = file_table.insert(pipe_reader, fd_flags);
|
||||
pipe_fds.writer_fd = file_table.insert(pipe_writer, fd_flags);
|
||||
debug!("pipe_fds: {:?}", pipe_fds);
|
||||
write_val_to_user(fds, &pipe_fds)?;
|
||||
|
||||
|
Reference in New Issue
Block a user