feat(fs): add sys_dup3 (#755)

* feat(fs): add sys_dup3
This commit is contained in:
zwb0x00
2024-04-23 19:35:02 +08:00
committed by GitHub
parent 3b799d13be
commit 40348dd8d5
6 changed files with 95 additions and 0 deletions

View File

@ -1020,6 +1020,21 @@ impl Syscall {
return Self::do_dup2(oldfd, newfd, &mut fd_table_guard);
}
pub fn dup3(oldfd: i32, newfd: i32, flags: u32) -> Result<usize, SystemError> {
let flags = FileMode::from_bits_truncate(flags);
if (flags.bits() & !FileMode::O_CLOEXEC.bits()) != 0 {
return Err(SystemError::EINVAL);
}
if oldfd == newfd {
return Err(SystemError::EINVAL);
}
let binding = ProcessManager::current_pcb().fd_table();
let mut fd_table_guard = binding.write();
return Self::do_dup3(oldfd, newfd, flags, &mut fd_table_guard);
}
fn do_dup2(
oldfd: i32,
newfd: i32,

View File

@ -399,6 +399,13 @@ impl Syscall {
Self::dup2(oldfd, newfd)
}
SYS_DUP3 => {
let oldfd: i32 = args[0] as c_int;
let newfd: i32 = args[1] as c_int;
let flags: u32 = args[2] as u32;
Self::dup3(oldfd, newfd, flags)
}
SYS_SOCKET => Self::socket(args[0], args[1], args[2]),
SYS_SETSOCKOPT => {
let optval = args[3] as *const u8;