From c8ad74b4025122e58548aaea51d91ee14588f0de Mon Sep 17 00:00:00 2001 From: Ibuki Omatsu Date: Mon, 28 Jul 2025 15:33:13 +0000 Subject: [PATCH] feat: Add call_ro, call_wo and call_wr to call module. --- Cargo.toml | 2 +- src/lib.rs | 87 +++++++++++++++++++++++++++++++++++------------------- 2 files changed, 58 insertions(+), 31 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 5694030cc8..aad43cac1a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "libredox" authors = ["4lDO2 <4lDO2@protonmail.com>"] -version = "0.1.7" +version = "0.1.8" edition = "2021" license = "MIT" description = "Redox stable ABI" diff --git a/src/lib.rs b/src/lib.rs index 44c321165a..f1db6f777a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -378,16 +378,7 @@ impl Fd { flags: syscall::CallFlags, metadata: &[u64], ) -> Result { - Ok(Error::demux(unsafe { - redox_sys_call_v0( - self.raw(), - payload.as_mut_ptr(), - payload.len(), - (flags | syscall::CallFlags::READ).bits(), - metadata.as_ptr(), - metadata.len(), - ) - })?) + call::call_ro(self.raw(), payload, flags, metadata) } #[inline] pub fn call_wo( @@ -396,16 +387,7 @@ impl Fd { flags: syscall::CallFlags, metadata: &[u64], ) -> Result { - Ok(Error::demux(unsafe { - redox_sys_call_v0( - self.raw(), - payload.as_ptr() as *mut u8, - payload.len(), - (flags | syscall::CallFlags::WRITE).bits(), - metadata.as_ptr(), - metadata.len(), - ) - })?) + call::call_wo(self.raw(), payload, flags, metadata) } #[inline] pub fn call_rw( @@ -414,16 +396,7 @@ impl Fd { flags: syscall::CallFlags, metadata: &[u64], ) -> Result { - Ok(Error::demux(unsafe { - redox_sys_call_v0( - self.raw(), - payload.as_mut_ptr(), - payload.len(), - (flags | syscall::CallFlags::READ | syscall::CallFlags::WRITE).bits(), - metadata.as_ptr(), - metadata.len(), - ) - })?) + call::call_rw(self.raw(), payload, flags, metadata) } } #[cfg(feature = "call")] @@ -531,6 +504,60 @@ pub mod call { Error::demux(unsafe { redox_close_v1(raw_fd) })?; Ok(()) } + #[inline] + pub fn call_ro( + fd: usize, + payload: &mut [u8], + flags: syscall::CallFlags, + metadata: &[u64], + ) -> Result { + Ok(Error::demux(unsafe { + redox_sys_call_v0( + fd, + payload.as_mut_ptr(), + payload.len(), + (flags | syscall::CallFlags::READ).bits(), + metadata.as_ptr(), + metadata.len(), + ) + })?) + } + #[inline] + pub fn call_wo( + fd: usize, + payload: &[u8], + flags: syscall::CallFlags, + metadata: &[u64], + ) -> Result { + Ok(Error::demux(unsafe { + redox_sys_call_v0( + fd, + payload.as_ptr() as *mut u8, + payload.len(), + (flags | syscall::CallFlags::WRITE).bits(), + metadata.as_ptr(), + metadata.len(), + ) + })?) + } + #[inline] + pub fn call_rw( + fd: usize, + payload: &mut [u8], + flags: syscall::CallFlags, + metadata: &[u64], + ) -> Result { + Ok(Error::demux(unsafe { + redox_sys_call_v0( + fd, + payload.as_mut_ptr(), + payload.len(), + (flags | syscall::CallFlags::READ | syscall::CallFlags::WRITE).bits(), + metadata.as_ptr(), + metadata.len(), + ) + })?) + } #[inline] pub fn geteuid() -> Result {