diff --git a/redox-rt/src/sys.rs b/redox-rt/src/sys.rs index f0363a39a9..1cf58baec4 100644 --- a/redox-rt/src/sys.rs +++ b/redox-rt/src/sys.rs @@ -561,3 +561,8 @@ pub fn std_fs_call_rw(fd: usize, payload: &mut [u8], metadata: &StdFsCallMeta) - pub fn fstat(fd: usize, stat: &mut syscall::Stat) -> Result { std_fs_call_ro(fd, stat, &StdFsCallMeta::new(StdFsCallKind::Fstat, 0, 0)) } + +pub fn fcntl(fd: usize, cmd: usize, arg: usize) -> Result { + let _siglock = tmp_disable_signals(); + FdGuard::new(syscall::fcntl(fd, cmd, arg)).map(|g| g.as_raw_fd()) +} diff --git a/src/platform/redox/libredox.rs b/src/platform/redox/libredox.rs index 2aad40861f..04c76dede8 100644 --- a/src/platform/redox/libredox.rs +++ b/src/platform/redox/libredox.rs @@ -378,6 +378,11 @@ pub unsafe extern "C" fn redox_close_v1(fd: usize) -> RawResult { Error::mux(syscall::close(fd)) } +#[unsafe(no_mangle)] +pub unsafe extern "C" fn redox_fcntl_v0(fd: usize, cmd: usize, arg: usize) -> RawResult { + Error::mux(redox_rt::sys::fcntl(fd, cmd, arg)) +} + #[unsafe(no_mangle)] pub unsafe extern "C" fn redox_get_pid_v1() -> RawResult { redox_rt::sys::posix_getpid() as _