From 49c708f53776b5ea9ba919d43ef3526e93e87fb3 Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Sun, 4 Aug 2024 13:44:42 +0200 Subject: [PATCH] Remove all uses of the legacy scheme syntax" --- redox-rt/src/lib.rs | 2 +- redox-rt/src/proc.rs | 4 ++-- redox-rt/src/thread.rs | 2 +- src/header/pty/redox.rs | 2 +- src/header/stdlib/mod.rs | 2 +- src/header/sys_mman/mod.rs | 2 +- src/ld_so/mod.rs | 4 ++-- src/platform/redox/epoll.rs | 4 ++-- src/platform/redox/event.rs | 2 +- src/platform/redox/exec.rs | 8 ++++---- src/platform/redox/extra.rs | 2 +- src/platform/redox/mod.rs | 12 ++++++------ src/platform/redox/ptrace.rs | 12 ++++++------ src/platform/redox/signal.rs | 4 ++-- src/platform/redox/socket.rs | 12 ++++++++---- 15 files changed, 39 insertions(+), 35 deletions(-) diff --git a/redox-rt/src/lib.rs b/redox-rt/src/lib.rs index cb14dd39..9aa0d90b 100644 --- a/redox-rt/src/lib.rs +++ b/redox-rt/src/lib.rs @@ -63,7 +63,7 @@ impl RtTcb { unsafe { if (&*self.thr_fd.get()).is_none() { self.thr_fd.get().write(Some(FdGuard::new( - syscall::open("thisproc:current/open_via_dup", O_CLOEXEC).unwrap(), + syscall::open("/scheme/thisproc/current/open_via_dup", O_CLOEXEC).unwrap(), ))); } (&*self.thr_fd.get()).as_ref().unwrap() diff --git a/redox-rt/src/proc.rs b/redox-rt/src/proc.rs index c4aea31f..cb84a068 100644 --- a/redox-rt/src/proc.rs +++ b/redox-rt/src/proc.rs @@ -733,7 +733,7 @@ pub fn fork_inner(initial_rsp: *mut usize) -> Result<usize> { let (cur_filetable_fd, new_pid_fd, new_pid); { - let cur_pid_fd = FdGuard::new(syscall::open("thisproc:current/open_via_dup", O_CLOEXEC)?); + let cur_pid_fd = FdGuard::new(syscall::open("/scheme/thisproc/current/open_via_dup", O_CLOEXEC)?); (new_pid_fd, new_pid) = new_child_process()?; copy_str(*cur_pid_fd, *new_pid_fd, "name")?; @@ -861,7 +861,7 @@ pub fn fork_inner(initial_rsp: *mut usize) -> Result<usize> { pub fn new_child_process() -> Result<(FdGuard, usize)> { // Create a new context (fields such as uid/gid will be inherited from the current context). - let fd = FdGuard::new(syscall::open("thisproc:new/open_via_dup", O_CLOEXEC)?); + let fd = FdGuard::new(syscall::open("/scheme/thisproc/new/open_via_dup", O_CLOEXEC)?); // Extract pid. let mut buffer = [0_u8; 64]; diff --git a/redox-rt/src/thread.rs b/redox-rt/src/thread.rs index 0a369511..664588ab 100644 --- a/redox-rt/src/thread.rs +++ b/redox-rt/src/thread.rs @@ -6,7 +6,7 @@ use crate::{arch::*, proc::*, RtTcb}; pub unsafe fn rlct_clone_impl(stack: *mut usize) -> Result<FdGuard> { let cur_thr_fd = RtTcb::current().thread_fd(); let new_thr_fd = FdGuard::new(syscall::open( - "thisproc:new-thread/open_via_dup", + "/scheme/thisproc/new-thread/open_via_dup", O_CLOEXEC, )?); diff --git a/src/header/pty/redox.rs b/src/header/pty/redox.rs index 22f299fa..160889fd 100644 --- a/src/header/pty/redox.rs +++ b/src/header/pty/redox.rs @@ -5,7 +5,7 @@ use crate::{ }; pub(super) unsafe fn openpty(name: &mut [u8]) -> Result<(c_int, c_int), ()> { - let master = fcntl::open(c_str!("pty:").as_ptr(), fcntl::O_RDWR, 0); + let master = fcntl::open(c_str!("/scheme/pty").as_ptr(), fcntl::O_RDWR, 0); if master < 0 { return Err(()); } diff --git a/src/header/stdlib/mod.rs b/src/header/stdlib/mod.rs index fc65fba0..25255a84 100644 --- a/src/header/stdlib/mod.rs +++ b/src/header/stdlib/mod.rs @@ -746,7 +746,7 @@ pub unsafe extern "C" fn posix_memalign( #[no_mangle] pub unsafe extern "C" fn posix_openpt(flags: c_int) -> c_int { #[cfg(target_os = "redox")] - let r = open((b"pty:\0" as *const u8).cast(), O_CREAT); + let r = open((b"/scheme/pty\0" as *const u8).cast(), O_CREAT); #[cfg(target_os = "linux")] let r = open((b"/dev/ptmx\0" as *const u8).cast(), flags); diff --git a/src/header/sys_mman/mod.rs b/src/header/sys_mman/mod.rs index 3c91c2ac..29f639a7 100644 --- a/src/header/sys_mman/mod.rs +++ b/src/header/sys_mman/mod.rs @@ -111,7 +111,7 @@ pub unsafe extern "C" fn madvise(addr: *mut c_void, len: size_t, flags: c_int) - static SHM_PATH: &'static [u8] = b"/dev/shm/"; #[cfg(target_os = "redox")] -static SHM_PATH: &'static [u8] = b"shm:"; +static SHM_PATH: &'static [u8] = b"/scheme/shm/"; unsafe fn shm_path(name: *const c_char) -> CString { let name_c = CStr::from_ptr(name); diff --git a/src/ld_so/mod.rs b/src/ld_so/mod.rs index db559cb8..638bdb6e 100644 --- a/src/ld_so/mod.rs +++ b/src/ld_so/mod.rs @@ -126,7 +126,7 @@ pub unsafe fn init(sp: &'static Stack) { let mut env = syscall::EnvRegisters::default(); let file = syscall::open( - "thisproc:current/regs/env", + "/scheme/thisproc/current/regs/env", syscall::O_CLOEXEC | syscall::O_RDONLY, ) .expect_notls("failed to open handle for process registers"); @@ -142,7 +142,7 @@ pub unsafe fn init(sp: &'static Stack) { let mut env = syscall::EnvRegisters::default(); let file = syscall::open( - "thisproc:current/regs/env", + "/scheme/thisproc/current/regs/env", syscall::O_CLOEXEC | syscall::O_RDONLY, ) .expect_notls("failed to open handle for process registers"); diff --git a/src/platform/redox/epoll.rs b/src/platform/redox/epoll.rs index 87fd1280..60eaca05 100644 --- a/src/platform/redox/epoll.rs +++ b/src/platform/redox/epoll.rs @@ -53,7 +53,7 @@ fn event_flags_to_epoll(flags: syscall::EventFlags) -> c_uint { impl PalEpoll for Sys { fn epoll_create1(flags: c_int) -> c_int { - Sys::open(c_str!("event:"), O_RDWR | flags, 0) + Sys::open(c_str!("/scheme/event"), O_RDWR | flags, 0) } fn epoll_ctl(epfd: c_int, op: c_int, fd: c_int, event: *mut epoll_event) -> c_int { @@ -118,7 +118,7 @@ impl PalEpoll for Sys { } let timer_opt = if timeout != -1 { - match File::open(c_str!("time:4"), O_RDWR) { + match File::open(c_str!("/scheme/time/4"), O_RDWR) { Err(_) => return -1, Ok(mut timer) => { if Sys::write( diff --git a/src/platform/redox/event.rs b/src/platform/redox/event.rs index e685a97e..8789b2a1 100644 --- a/src/platform/redox/event.rs +++ b/src/platform/redox/event.rs @@ -17,7 +17,7 @@ pub unsafe extern "C" fn redox_event_queue_create_v1(flags: u32) -> RawResult { if flags != 0 { return Err(Error::new(EINVAL)); } - Ok(super::libredox::open("event:", O_CLOEXEC | O_CREAT | O_RDWR, 0o700)? as usize) + Ok(super::libredox::open("/scheme/event", O_CLOEXEC | O_CREAT | O_RDWR, 0o700)? as usize) })()) } #[no_mangle] diff --git a/src/platform/redox/exec.rs b/src/platform/redox/exec.rs index 5dda2e77..81ac0de7 100644 --- a/src/platform/redox/exec.rs +++ b/src/platform/redox/exec.rs @@ -22,7 +22,7 @@ fn fexec_impl( extrainfo: &ExtraInfo, interp_override: Option<InterpOverride>, ) -> Result<usize> { - let memory = FdGuard::new(syscall::open("memory:", 0)?); + let memory = FdGuard::new(syscall::open("/scheme/memory", 0)?); let addrspace_selection_fd = match redox_rt::proc::fexec_impl( exec_file, @@ -252,7 +252,7 @@ pub fn execve( // scenarios. While execve() is undefined according to POSIX if there exist sibling // threads, it could still be allowed by keeping certain file descriptors and instead // set the active file table. - let files_fd = File::new(syscall::open("thisproc:current/filetable", O_RDONLY)? as c_int); + let files_fd = File::new(syscall::open("/scheme/thisproc/current/filetable", O_RDONLY)? as c_int); for line in BufReader::new(files_fd).lines() { let line = match line { Ok(l) => l, @@ -271,14 +271,14 @@ pub fn execve( } } - let this_context_fd = FdGuard::new(syscall::open("thisproc:current/open_via_dup", 0)?); + let this_context_fd = FdGuard::new(syscall::open("/scheme/thisproc/current/open_via_dup", 0)?); // TODO: Convert image_file to FdGuard earlier? let exec_fd_guard = FdGuard::new(image_file.fd as usize); core::mem::forget(image_file); if !is_interpreted && wants_setugid { // We are now going to invoke `escalate:` rather than loading the program ourselves. - let escalate_fd = FdGuard::new(syscall::open("escalate:", O_WRONLY)?); + let escalate_fd = FdGuard::new(syscall::open("/scheme/escalate", O_WRONLY)?); // First, send the context handle of this process to escalated. send_fd_guard(*escalate_fd, this_context_fd)?; diff --git a/src/platform/redox/extra.rs b/src/platform/redox/extra.rs index 3c96933c..235ca09d 100644 --- a/src/platform/redox/extra.rs +++ b/src/platform/redox/extra.rs @@ -17,7 +17,7 @@ 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 read_fd = FdGuard::new(syscall::open("/scheme/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)?; diff --git a/src/platform/redox/mod.rs b/src/platform/redox/mod.rs index f27e9d59..8916d170 100644 --- a/src/platform/redox/mod.rs +++ b/src/platform/redox/mod.rs @@ -491,9 +491,9 @@ impl Pal for Sys { let path = if flags & sys_random::GRND_RANDOM != 0 { //TODO: /dev/random equivalent - "rand:" + "/scheme/rand" } else { - "rand:" + "/scheme/rand" }; let mut open_flags = syscall::O_RDONLY | syscall::O_CLOEXEC; @@ -539,9 +539,9 @@ impl Pal for Sys { fn getsid(pid: pid_t) -> pid_t { let mut buf = [0; mem::size_of::<usize>()]; let path = if pid == 0 { - format!("thisproc:current/session_id") + format!("/scheme/thisproc/current/session_id") } else { - format!("proc:{}/session_id", pid) + format!("/scheme/proc/{}/session_id", pid) }; let path_c = CString::new(path).unwrap(); match File::open(CStr::borrow(&path_c), fcntl::O_RDONLY | fcntl::O_CLOEXEC) { @@ -920,7 +920,7 @@ impl Pal for Sys { return -1; } match File::open( - c_str!("thisproc:current/session_id"), + c_str!("/scheme/thisproc/current/session_id"), fcntl::O_WRONLY | fcntl::O_CLOEXEC, ) { Ok(mut file) => match file.write(&usize::to_ne_bytes(session_id.try_into().unwrap())) { @@ -1001,7 +1001,7 @@ impl Pal for Sys { Err(_) => return Err(EIO), } - let file_path = c_str!("sys:uname"); + let file_path = c_str!("/scheme/sys/uname"); let mut file = match File::open(file_path, fcntl::O_RDONLY | fcntl::O_CLOEXEC) { Ok(ok) => ok, Err(_) => return Err(EIO), diff --git a/src/platform/redox/ptrace.rs b/src/platform/redox/ptrace.rs index 14ed6d0b..a5c4f84b 100644 --- a/src/platform/redox/ptrace.rs +++ b/src/platform/redox/ptrace.rs @@ -57,7 +57,7 @@ pub fn is_traceme(pid: pid_t) -> bool { return false; } File::open( - CStr::borrow(&CString::new(format!("chan:ptrace-relibc/{}/traceme", pid)).unwrap()), + CStr::borrow(&CString::new(format!("/scheme/chan/ptrace-relibc/{}/traceme", pid)).unwrap()), fcntl::O_PATH, ) .is_ok() @@ -74,19 +74,19 @@ pub fn get_session( Ok(entry.insert(Session { first: true, tracer: File::open( - CStr::borrow(&CString::new(format!("proc:{}/trace", pid)).unwrap()), + CStr::borrow(&CString::new(format!("/scheme/proc/{}/trace", pid)).unwrap()), NEW_FLAGS, )?, mem: File::open( - CStr::borrow(&CString::new(format!("proc:{}/mem", pid)).unwrap()), + CStr::borrow(&CString::new(format!("/scheme/proc/{}/mem", pid)).unwrap()), NEW_FLAGS, )?, regs: File::open( - CStr::borrow(&CString::new(format!("proc:{}/regs/int", pid)).unwrap()), + CStr::borrow(&CString::new(format!("/scheme/proc/{}/regs/int", pid)).unwrap()), NEW_FLAGS, )?, fpregs: File::open( - CStr::borrow(&CString::new(format!("proc:{}/regs/float", pid)).unwrap()), + CStr::borrow(&CString::new(format!("/scheme/proc/{}/regs/float", pid)).unwrap()), NEW_FLAGS, )?, })) @@ -134,7 +134,7 @@ fn inner_ptrace( // Mark this child as traced, parent will check for this marker file let pid = Sys::getpid(); mem::forget(File::open( - CStr::borrow(&CString::new(format!("chan:ptrace-relibc/{}/traceme", pid)).unwrap()), + CStr::borrow(&CString::new(format!("/scheme/chan/ptrace-relibc/{}/traceme", pid)).unwrap()), fcntl::O_CREAT | fcntl::O_PATH | fcntl::O_EXCL, )?); return Ok(0); diff --git a/src/platform/redox/signal.rs b/src/platform/redox/signal.rs index e359c540..5910f3e2 100644 --- a/src/platform/redox/signal.rs +++ b/src/platform/redox/signal.rs @@ -23,7 +23,7 @@ use crate::{ impl PalSignal for Sys { unsafe fn getitimer(which: c_int, out: *mut itimerval) -> c_int { let path = match which { - ITIMER_REAL => "itimer:1", + ITIMER_REAL => "/scheme/itimer/1", _ => { ERRNO.set(EINVAL); return -1; @@ -67,7 +67,7 @@ impl PalSignal for Sys { unsafe fn setitimer(which: c_int, new: *const itimerval, old: *mut itimerval) -> c_int { let path = match which { - ITIMER_REAL => "itimer:1", + ITIMER_REAL => "/scheme/itimer/1", _ => { ERRNO.set(EINVAL); return -1; diff --git a/src/platform/redox/socket.rs b/src/platform/redox/socket.rs index 9c860537..54798b4d 100644 --- a/src/platform/redox/socket.rs +++ b/src/platform/redox/socket.rs @@ -183,8 +183,12 @@ unsafe fn inner_get_name( if buf.starts_with(b"tcp:") || buf.starts_with(b"udp:") { inner_af_inet(local, &buf[4..], address, address_len); + } else if buf.starts_with(b"/scheme/tcp/") || buf.starts_with(b"/scheme/udp/") { + inner_af_inet(local, &buf[12..], address, address_len); } else if buf.starts_with(b"chan:") { inner_af_unix(&buf[5..], address, address_len); + } else if buf.starts_with(b"/scheme/chan/") { + inner_af_unix(&buf[13..], address, address_len); } else { // Socket doesn't belong to any scheme panic!( @@ -432,9 +436,9 @@ impl PalSocket for Sys { // The tcp: and udp: schemes allow using no path, // and later specifying one using `dup`. match (domain, kind) { - (AF_INET, SOCK_STREAM) => e(syscall::open("tcp:", flags)) as c_int, - (AF_INET, SOCK_DGRAM) => e(syscall::open("udp:", flags)) as c_int, - (AF_UNIX, SOCK_STREAM) => e(syscall::open("chan:", flags | O_CREAT)) as c_int, + (AF_INET, SOCK_STREAM) => e(syscall::open("/scheme/tcp", flags)) as c_int, + (AF_INET, SOCK_DGRAM) => e(syscall::open("/scheme/udp", flags)) as c_int, + (AF_UNIX, SOCK_STREAM) => e(syscall::open("/scheme/chan", flags | O_CREAT)) as c_int, _ => { ERRNO.set(syscall::EPROTONOSUPPORT); -1 @@ -447,7 +451,7 @@ impl PalSocket for Sys { match (domain, kind) { (AF_UNIX, SOCK_STREAM) => { - let listener = e(syscall::open("chan:", flags | O_CREAT)); + let listener = e(syscall::open("/scheme/chan", flags | O_CREAT)); if listener == !0 { return -1; } -- GitLab