feat: Add call as a new method of Fd.

This commit is contained in:
Ibuki Omatsu
2025-07-26 14:21:22 +00:00
committed by Jacob Lorentzon
parent 2cacc86d93
commit 144500e2c9
2 changed files with 57 additions and 2 deletions
+2 -2
View File
@@ -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 }
+55
View File
@@ -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<usize> {
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<usize> {
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<usize> {
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 {