Jump to trampoline after SYS_{READ,WRITE} EINTR.

This commit is contained in:
4lDO2
2024-06-29 15:58:09 +02:00
parent a166a1ebb2
commit 5460ffc4c9
6 changed files with 77 additions and 12 deletions
+3 -2
View File
@@ -1,5 +1,6 @@
use core::{slice, str};
use redox_rt::sys::{posix_read, posix_write};
use syscall::{Error, Result, WaitFlags, EMFILE};
use crate::{
@@ -147,7 +148,7 @@ pub unsafe extern "C" fn redox_dup2_v1(
}
#[no_mangle]
pub unsafe extern "C" fn redox_read_v1(fd: usize, dst_base: *mut u8, dst_len: usize) -> RawResult {
Error::mux(syscall::read(
Error::mux(posix_read(
fd,
slice::from_raw_parts_mut(dst_base, dst_len),
))
@@ -158,7 +159,7 @@ pub unsafe extern "C" fn redox_write_v1(
src_base: *const u8,
src_len: usize,
) -> RawResult {
Error::mux(syscall::write(fd, slice::from_raw_parts(src_base, src_len)))
Error::mux(posix_write(fd, slice::from_raw_parts(src_base, src_len)))
}
#[no_mangle]
pub unsafe extern "C" fn redox_fsync_v1(fd: usize) -> RawResult {
+5 -3
View File
@@ -10,7 +10,7 @@ use crate::{
fs::File,
header::{
dirent::dirent,
errno::{EBADR, EINVAL, EIO, ENOENT, ENOMEM, ENOSYS, EPERM, ERANGE},
errno::{EBADF, EBADFD, EBADR, EINVAL, EIO, ENOENT, ENOMEM, ENOSYS, EPERM, ERANGE},
fcntl, limits,
sys_mman::{MAP_ANONYMOUS, MAP_FAILED, PROT_READ, PROT_WRITE},
sys_random,
@@ -824,7 +824,8 @@ impl Pal for Sys {
}
fn read(fd: c_int, buf: &mut [u8]) -> Result<ssize_t, Errno> {
Ok(syscall::read(fd as usize, buf)? as ssize_t)
let fd = usize::try_from(fd).map_err(|_| Errno(EBADF))?;
Ok(redox_rt::sys::posix_read(fd, buf)? as ssize_t)
}
fn pread(fd: c_int, buf: &mut [u8], offset: off_t) -> Result<ssize_t, Errno> {
unsafe {
@@ -1124,7 +1125,8 @@ impl Pal for Sys {
}
fn write(fd: c_int, buf: &[u8]) -> Result<ssize_t, Errno> {
Ok(syscall::write(fd as usize, buf)? as ssize_t)
let fd = usize::try_from(fd).map_err(|_| Errno(EBADFD))?;
Ok(redox_rt::sys::posix_write(fd, buf)? as ssize_t)
}
fn pwrite(fd: c_int, buf: &[u8], offset: off_t) -> Result<ssize_t, Errno> {
unsafe {