Merge branch 'pipe_scheme' into 'master'

Replace syscall::pipe2 with pipe scheme.

See merge request redox-os/relibc!410
This commit is contained in:
Jeremy Soller
2023-06-30 12:19:59 +00:00
3 changed files with 24 additions and 6 deletions
+1 -1
View File
@@ -2,7 +2,7 @@
name = "relibc"
version = "0.2.5"
authors = ["Jeremy Soller <jackpot51@gmail.com>"]
edition = "2018"
edition = "2021"
[lib]
name = "relibc"
+22
View File
@@ -2,6 +2,8 @@ use core::{ptr, slice};
use crate::platform::{sys::e, types::*};
use syscall::{error::*, F_SETFD, F_SETFL};
#[no_mangle]
pub unsafe extern "C" fn redox_fpath(fd: c_int, buf: *mut c_void, count: size_t) -> ssize_t {
e(syscall::fpath(
@@ -48,4 +50,24 @@ pub unsafe extern "C" fn redox_physunmap(virtual_address: *mut c_void) -> c_int
e(syscall::physunmap(virtual_address as usize)) as c_int
}
pub fn pipe2(fds: &mut [c_int], flags: usize) -> syscall::error::Result<()> {
let fds =
<&mut [c_int; 2]>::try_from(fds).expect("expected Pal pipe2 to have validated pipe2 array");
let mut read_fd = FdGuard::new(syscall::open("pipe:", flags)?);
let mut write_fd = FdGuard::new(syscall::dup(*read_fd, b"write")?);
syscall::fcntl(*write_fd, F_SETFL, flags)?;
syscall::fcntl(*write_fd, F_SETFD, flags)?;
*fds = [
c_int::try_from(*read_fd).map_err(|_| Error::new(EMFILE))?,
c_int::try_from(*write_fd).map_err(|_| Error::new(EMFILE))?,
];
read_fd.take();
write_fd.take();
Ok(())
}
pub use redox_exec::{create_set_addr_space_buf, FdGuard};
+1 -5
View File
@@ -767,11 +767,7 @@ impl Pal for Sys {
}
fn pipe2(fds: &mut [c_int], flags: c_int) -> c_int {
let mut usize_fds: [usize; 2] = [0; 2];
let res = e(syscall::pipe2(&mut usize_fds, flags as usize));
fds[0] = usize_fds[0] as c_int;
fds[1] = usize_fds[1] as c_int;
res as c_int
e(extra::pipe2(fds, flags as usize).map(|()| 0)) as c_int
}
unsafe fn rlct_clone(