Merge branch 'relpathat' into 'master'
feat: Implement relpathat See merge request redox-os/relibc!1360
This commit is contained in:
Generated
+6
-6
@@ -256,9 +256,9 @@ checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de"
|
||||
|
||||
[[package]]
|
||||
name = "libredox"
|
||||
version = "0.1.16"
|
||||
version = "0.1.17"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e02f3bb43d335493c96bf3fd3a321600bf6bd07ed34bc64118e9293bdffea46c"
|
||||
checksum = "f02ab6bace2054fb888a3c16f990117b579d14a3088e472d63c6011fa185c9d3"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"libc",
|
||||
@@ -461,9 +461,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "redox_event"
|
||||
version = "0.4.6"
|
||||
version = "0.4.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4ea3e412d205440c7b0218af26247226f979ed1201674cda7a33cc70609084b5"
|
||||
checksum = "8c07d0d6d291e3a951bd847b1cd4af32fc6243d64116cf7702838c02797688b7"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"libredox",
|
||||
@@ -472,9 +472,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "redox_syscall"
|
||||
version = "0.7.4"
|
||||
version = "0.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f450ad9c3b1da563fb6948a8e0fb0fb9269711c9c73d9ea1de5058c79c8d643a"
|
||||
checksum = "7c7591fa2c6b601dfcfe5f043f65a1c39fcdf50efefcd7f1572e538c1f4b398d"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
]
|
||||
|
||||
+3
-4
@@ -67,9 +67,8 @@ bitflags = "2"
|
||||
ioslice = { version = "0.6", default-features = false }
|
||||
plain = "0.2"
|
||||
redox-path = "0.3"
|
||||
redox_protocols = { package = "libredox", version = "0.1.16", default-features = false, features = ["protocol"] }
|
||||
redox_syscall = "0.7.4"
|
||||
|
||||
redox_protocols = { package = "libredox", version = "0.1.17", default-features = false, features = ["protocol"] }
|
||||
redox_syscall = "0.8.0"
|
||||
[build-dependencies]
|
||||
cc = "1"
|
||||
|
||||
@@ -121,7 +120,7 @@ sc = "0.2.7"
|
||||
redox_syscall.workspace = true
|
||||
redox-rt = { path = "redox-rt" }
|
||||
redox-path.workspace = true
|
||||
redox_event = { version = "0.4.6", default-features = false, features = [
|
||||
redox_event = { version = "0.4.7", default-features = false, features = [
|
||||
"redox_syscall",
|
||||
] }
|
||||
ioslice.workspace = true
|
||||
|
||||
@@ -8,6 +8,6 @@ description = "Ioctl definitions and (de)serialization for Redox"
|
||||
|
||||
[dependencies]
|
||||
drm-sys = "0.8.0"
|
||||
redox_syscall = "0.7"
|
||||
redox_syscall = "0.8"
|
||||
|
||||
[features]
|
||||
|
||||
+29
-36
@@ -6,7 +6,7 @@ use core::{
|
||||
|
||||
use ioslice::IoSlice;
|
||||
use syscall::{
|
||||
CallFlags, EINVAL, ERESTART, StdFsCallKind, TimeSpec,
|
||||
Call, CallFlags, EINVAL, ERESTART, StdFsCallKind, TimeSpec,
|
||||
data::StdFsCallMeta,
|
||||
error::{self, EINTR, ENODEV, ESRCH, Error, Result},
|
||||
};
|
||||
@@ -171,33 +171,14 @@ pub unsafe fn sys_futex_wake(addr: *mut u32, num: u32) -> Result<u32> {
|
||||
}
|
||||
.map(|awoken| awoken as u32)
|
||||
}
|
||||
unsafe fn raw_sys_call(
|
||||
fd: usize,
|
||||
payload_ptr: *const u8,
|
||||
len: usize,
|
||||
flags: CallFlags,
|
||||
metadata: &[u64],
|
||||
) -> Result<usize> {
|
||||
unsafe {
|
||||
syscall::syscall5(
|
||||
syscall::SYS_CALL,
|
||||
fd,
|
||||
payload_ptr as usize,
|
||||
len,
|
||||
metadata.len() | flags.bits(),
|
||||
metadata.as_ptr() as usize,
|
||||
)
|
||||
}
|
||||
}
|
||||
pub fn sys_call_ro(
|
||||
fd: usize,
|
||||
pub fn sys_call_ro<T: Call>(
|
||||
fd: T,
|
||||
payload: &mut [u8],
|
||||
flags: CallFlags,
|
||||
metadata: &[u64],
|
||||
) -> Result<usize> {
|
||||
unsafe {
|
||||
raw_sys_call(
|
||||
fd,
|
||||
fd.raw_call(
|
||||
payload.as_mut_ptr(),
|
||||
payload.len(),
|
||||
flags | CallFlags::READ,
|
||||
@@ -205,10 +186,14 @@ pub fn sys_call_ro(
|
||||
)
|
||||
}
|
||||
}
|
||||
pub fn sys_call_wo(fd: usize, payload: &[u8], flags: CallFlags, metadata: &[u64]) -> Result<usize> {
|
||||
pub fn sys_call_wo<T: Call>(
|
||||
fd: T,
|
||||
payload: &[u8],
|
||||
flags: CallFlags,
|
||||
metadata: &[u64],
|
||||
) -> Result<usize> {
|
||||
unsafe {
|
||||
raw_sys_call(
|
||||
fd,
|
||||
fd.raw_call(
|
||||
payload.as_ptr(),
|
||||
payload.len(),
|
||||
flags | CallFlags::WRITE,
|
||||
@@ -216,15 +201,14 @@ pub fn sys_call_wo(fd: usize, payload: &[u8], flags: CallFlags, metadata: &[u64]
|
||||
)
|
||||
}
|
||||
}
|
||||
pub fn sys_call_rw(
|
||||
fd: usize,
|
||||
pub fn sys_call_rw<T: Call>(
|
||||
fd: T,
|
||||
payload: &mut [u8],
|
||||
flags: CallFlags,
|
||||
metadata: &[u64],
|
||||
) -> Result<usize> {
|
||||
unsafe {
|
||||
raw_sys_call(
|
||||
fd,
|
||||
fd.raw_call(
|
||||
payload.as_mut_ptr(),
|
||||
payload.len(),
|
||||
flags | CallFlags::READ | CallFlags::WRITE,
|
||||
@@ -232,14 +216,15 @@ pub fn sys_call_rw(
|
||||
)
|
||||
}
|
||||
}
|
||||
pub fn sys_call(
|
||||
fd: usize,
|
||||
pub fn sys_call<T: Call>(
|
||||
fd: T,
|
||||
payload: &mut [u8],
|
||||
flags: CallFlags,
|
||||
metadata: &[u64],
|
||||
) -> Result<usize> {
|
||||
unsafe { raw_sys_call(fd, payload.as_mut_ptr(), payload.len(), flags, metadata) }
|
||||
unsafe { fd.raw_call(payload.as_mut_ptr(), payload.len(), flags, metadata) }
|
||||
}
|
||||
|
||||
pub fn this_proc_call(payload: &mut [u8], flags: CallFlags, metadata: &[u64]) -> Result<usize> {
|
||||
proc_call(
|
||||
crate::current_proc_fd().as_raw_fd(),
|
||||
@@ -549,13 +534,21 @@ pub fn register_scheme_to_ns(ns_fd: usize, name: &str, cap_fd: usize) -> Result<
|
||||
ns_this_scheme.call_wo(&cap_bytes, CallFlags::FD, &[])?;
|
||||
Ok(())
|
||||
}
|
||||
pub fn std_fs_call_ro(fd: usize, payload: &mut [u8], metadata: &StdFsCallMeta) -> Result<usize> {
|
||||
pub fn std_fs_call_ro<T: Call>(
|
||||
fd: T,
|
||||
payload: &mut [u8],
|
||||
metadata: &StdFsCallMeta,
|
||||
) -> Result<usize> {
|
||||
sys_call_ro(fd, payload, CallFlags::STD_FS, metadata)
|
||||
}
|
||||
pub fn std_fs_call_wo(fd: usize, payload: &[u8], metadata: &StdFsCallMeta) -> Result<usize> {
|
||||
pub fn std_fs_call_wo<T: Call>(fd: T, payload: &[u8], metadata: &StdFsCallMeta) -> Result<usize> {
|
||||
sys_call_wo(fd, payload, CallFlags::STD_FS, metadata)
|
||||
}
|
||||
pub fn std_fs_call_rw(fd: usize, payload: &mut [u8], metadata: &StdFsCallMeta) -> Result<usize> {
|
||||
pub fn std_fs_call_rw<T: Call>(
|
||||
fd: T,
|
||||
payload: &mut [u8],
|
||||
metadata: &StdFsCallMeta,
|
||||
) -> Result<usize> {
|
||||
sys_call_rw(fd, payload, CallFlags::STD_FS, metadata)
|
||||
}
|
||||
pub fn fstat(fd: usize, stat: &mut syscall::Stat) -> Result<usize> {
|
||||
|
||||
@@ -616,3 +616,17 @@ pub unsafe extern "C" fn redox_register_scheme_to_ns_v0(
|
||||
.map(|()| 0),
|
||||
)
|
||||
}
|
||||
|
||||
#[unsafe(no_mangle)]
|
||||
pub unsafe extern "C" fn redox_relpathat_v0(
|
||||
dirfd: usize,
|
||||
fd: usize,
|
||||
dst_base: *mut u8,
|
||||
dst_len: usize,
|
||||
) -> RawResult {
|
||||
Error::mux(redox_rt::sys::std_fs_call_ro(
|
||||
&[dirfd, fd][..],
|
||||
unsafe { slice::from_raw_parts_mut(dst_base, dst_len) },
|
||||
&StdFsCallMeta::new(StdFsCallKind::Relpathat, 0, 0),
|
||||
))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user