feat: Add call_ro, call_wo and call_wr to call module.

This commit is contained in:
Ibuki Omatsu
2025-07-28 15:33:13 +00:00
committed by Jeremy Soller
parent c2e45479c9
commit c8ad74b402
2 changed files with 58 additions and 31 deletions
+1 -1
View File
@@ -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"
+57 -30
View File
@@ -378,16 +378,7 @@ impl Fd {
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(),
)
})?)
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<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(),
)
})?)
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<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(),
)
})?)
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<usize> {
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<usize> {
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<usize> {
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<usize> {