1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
use crate::io; use crate::sys::{ReadSysCall, WriteSysCall}; pub struct Stdin; pub struct Stdout; pub struct Stderr; impl Stdin { pub fn new() -> io::Result<Stdin> { Ok(Stdin) } } impl io::Read for Stdin { fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> { Ok(ReadSysCall::perform(0, buf)) } } impl Stdout { pub fn new() -> io::Result<Stdout> { Ok(Stdout) } } impl io::Write for Stdout { fn write(&mut self, buf: &[u8]) -> io::Result<usize> { WriteSysCall::perform(1, buf); Ok(buf.len()) } fn flush(&mut self) -> io::Result<()> { Ok(()) } } impl Stderr { pub fn new() -> io::Result<Stderr> { Ok(Stderr) } } impl io::Write for Stderr { fn write(&mut self, buf: &[u8]) -> io::Result<usize> { WriteSysCall::perform(2, buf); Ok(buf.len()) } fn flush(&mut self) -> io::Result<()> { Ok(()) } } pub const STDIN_BUF_SIZE: usize = 0; pub fn is_ebadf(_err: &io::Error) -> bool { true } pub fn panic_output() -> Option<impl io::Write> { if cfg!(feature = "wasm_syscall") { Stderr::new().ok() } else { None } }