From 144500e2c98eb0dee09b0af09d7ab7ac9c4c1256 Mon Sep 17 00:00:00 2001 From: Ibuki Omatsu Date: Sat, 26 Jul 2025 14:21:22 +0000 Subject: [PATCH] feat: Add call as a new method of Fd. --- Cargo.toml | 4 ++-- src/lib.rs | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index e6e0b54840..5694030cc8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "libredox" authors = ["4lDO2 <4lDO2@protonmail.com>"] -version = "0.1.6" +version = "0.1.7" edition = "2021" license = "MIT" description = "Redox stable ABI" @@ -19,5 +19,5 @@ mkns = ["ioslice"] [dependencies] bitflags = "2" libc = "0.2" -redox_syscall = { version = "0.5", optional = true } +redox_syscall = { version = "0.5.16", optional = true } ioslice = { version = "0.6", optional = true } diff --git a/src/lib.rs b/src/lib.rs index 4ab99852fd..44c321165a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -370,6 +370,61 @@ impl Fd { pub fn close(self) -> Result<()> { call::close(self.into_raw()) } + + #[inline] + pub fn call_ro( + &self, + payload: &mut [u8], + 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(), + ) + })?) + } + #[inline] + pub fn call_wo( + &self, + payload: &[u8], + 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(), + ) + })?) + } + #[inline] + pub fn call_rw( + &self, + payload: &mut [u8], + 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(), + ) + })?) + } } #[cfg(feature = "call")] impl Drop for Fd {