From 5c222c6e01c1f5f65da7aeeaeec5320b7ac72acd Mon Sep 17 00:00:00 2001 From: Mark Poliakov Date: Mon, 8 Jan 2024 18:41:17 +0200 Subject: [PATCH] alnyan/yggdrasil: fix start_terminal_session() --- library/std/src/os/yggdrasil/io/terminal.rs | 26 ++++++++++++--------- library/std/src/os/yggdrasil/mod.rs | 8 +++++++ 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/library/std/src/os/yggdrasil/io/terminal.rs b/library/std/src/os/yggdrasil/io/terminal.rs index d50f8534019..d3c4f2045b2 100644 --- a/library/std/src/os/yggdrasil/io/terminal.rs +++ b/library/std/src/os/yggdrasil/io/terminal.rs @@ -1,12 +1,12 @@ #![unstable(feature = "yggdrasil_os", issue = "none")] -use yggdrasil_rt::io::{device::DeviceRequest, terminal as rt_terminal}; +use yggdrasil_rt::io::{device::DeviceRequest, terminal as rt_terminal, FileMode, OpenOptions}; use yggdrasil_rt::sys as syscall; use crate::fs::File; use crate::io; use crate::mem::MaybeUninit; -use crate::os::fd::{AsRawFd, FromRawFd}; +use crate::os::fd::{AsRawFd, FromRawFd, RawFd}; use crate::path::Path; use crate::sys::cvt_io; @@ -55,19 +55,23 @@ pub unsafe fn update_terminal_options Term } #[unstable(feature = "yggdrasil_os", issue = "none")] -pub unsafe fn start_terminal_session>(_terminal: P) -> io::Result<()> { - todo!() - // let terminal = terminal.as_ref().to_str().unwrap(); +pub unsafe fn start_terminal_session>(terminal: P) -> io::Result<()> { + let terminal = terminal.as_ref().to_str().unwrap(); - // cvt_io(syscall::start_session())?; + cvt_io(syscall::start_session())?; - // // TODO implement open flags to explicitly set stdin/stdout/stderr + let stdin_fd = cvt_io(syscall::open(None, terminal, OpenOptions::READ, FileMode::empty()))?; + let stdout_stderr_fd = + cvt_io(syscall::open(None, terminal, OpenOptions::WRITE, FileMode::empty()))?; - // cvt_io(syscall::open(None, terminal, OpenOptions::READ, FileMode::empty()))?; - // cvt_io(syscall::open(None, terminal, OpenOptions::WRITE, FileMode::empty()))?; - // cvt_io(syscall::open(None, terminal, OpenOptions::WRITE, FileMode::empty()))?; + cvt_io(syscall::clone_fd(stdin_fd, Some(RawFd::STDIN)))?; + cvt_io(syscall::clone_fd(stdout_stderr_fd, Some(RawFd::STDOUT)))?; + cvt_io(syscall::clone_fd(stdout_stderr_fd, Some(RawFd::STDERR)))?; - // Ok(()) + cvt_io(syscall::close(stdin_fd))?; + cvt_io(syscall::close(stdout_stderr_fd))?; + + Ok(()) } #[unstable(feature = "yggdrasil_os", issue = "none")] diff --git a/library/std/src/os/yggdrasil/mod.rs b/library/std/src/os/yggdrasil/mod.rs index 6a3300ce353..4ea6f9803d6 100644 --- a/library/std/src/os/yggdrasil/mod.rs +++ b/library/std/src/os/yggdrasil/mod.rs @@ -30,3 +30,11 @@ pub mod signal { unsafe { crate::sys::signal::set_signal_handler(signal, handler) } } } + +#[unstable(feature = "yggdrasil_libc", issue = "none")] +pub mod libc_runtime { + #[unstable(feature = "yggdrasil_libc", issue = "none")] + pub unsafe fn start(_arg: usize) -> ! { + loop {} + } +}