From f0b3d5166ef1255fac880b146875ef46d2599a13 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Sat, 4 Apr 2020 13:22:18 +0200 Subject: Reorganize --- safe_libc/src/stdio.rs | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 safe_libc/src/stdio.rs (limited to 'safe_libc/src/stdio.rs') diff --git a/safe_libc/src/stdio.rs b/safe_libc/src/stdio.rs new file mode 100644 index 0000000..5f33f74 --- /dev/null +++ b/safe_libc/src/stdio.rs @@ -0,0 +1,47 @@ +use crate as libc; +use crate::string; + +use core::fmt; + +pub struct OStream { + file: *mut libc::FILE +} + +#[inline] +pub unsafe fn stdout() -> OStream { + OStream { file: libc::stdout } +} + +#[inline] +pub unsafe fn stderr() -> OStream { + OStream { file: libc::stderr } +} + +impl OStream { + #[inline] + pub fn write(&mut self, b: &[u8]) { + unsafe { + libc::fwrite( + b.as_ptr() as *const libc::c_void, + 1, + b.len(), + self.file, + ); + } + } + + #[inline] + pub fn puts(&mut self, s: &string::CStr) { + unsafe { + libc::fputs(s.as_ptr(), self.file); + } + } +} + +impl fmt::Write for OStream { + #[inline] + fn write_str(&mut self, s: &str) -> fmt::Result { + self.write(s.as_bytes()); + Ok(()) + } +} -- cgit v1.2.3