Merge branch 'pipe_scheme' into 'master'
Replace syscall::pipe2 with pipe scheme. See merge request redox-os/relibc!410
This commit is contained in:
+1
-1
@@ -2,7 +2,7 @@
|
||||
name = "relibc"
|
||||
version = "0.2.5"
|
||||
authors = ["Jeremy Soller <jackpot51@gmail.com>"]
|
||||
edition = "2018"
|
||||
edition = "2021"
|
||||
|
||||
[lib]
|
||||
name = "relibc"
|
||||
|
||||
@@ -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};
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user