Add print helpers
This commit is contained in:
parent
f0e87da0aa
commit
487ca98456
@ -20,6 +20,7 @@ dwarf-expr = []
|
|||||||
hide-trace = []
|
hide-trace = []
|
||||||
personality = []
|
personality = []
|
||||||
personality-dummy = []
|
personality-dummy = []
|
||||||
|
print = ["libc"]
|
||||||
system-alloc = []
|
system-alloc = []
|
||||||
default = ["dwarf-expr", "hide-trace", "fde-phdr", "fde-registry"]
|
default = ["dwarf-expr", "hide-trace", "fde-phdr", "fde-registry"]
|
||||||
|
|
||||||
|
@ -1,7 +1,10 @@
|
|||||||
#![feature(c_unwind)]
|
#![feature(c_unwind)]
|
||||||
#![feature(naked_functions)]
|
#![feature(naked_functions)]
|
||||||
#![feature(asm)]
|
#![feature(asm)]
|
||||||
#![cfg_attr(any(feature = "personality", feature = "personality-dummy"), feature(lang_items))]
|
#![cfg_attr(
|
||||||
|
any(feature = "personality", feature = "personality-dummy"),
|
||||||
|
feature(lang_items)
|
||||||
|
)]
|
||||||
#![warn(rust_2018_idioms)]
|
#![warn(rust_2018_idioms)]
|
||||||
#![warn(unsafe_op_in_unsafe_fn)]
|
#![warn(unsafe_op_in_unsafe_fn)]
|
||||||
#![no_std]
|
#![no_std]
|
||||||
@ -15,6 +18,9 @@ mod find_fde;
|
|||||||
mod frame;
|
mod frame;
|
||||||
mod util;
|
mod util;
|
||||||
|
|
||||||
|
#[cfg(feature = "print")]
|
||||||
|
pub mod print;
|
||||||
|
|
||||||
#[cfg(feature = "personality")]
|
#[cfg(feature = "personality")]
|
||||||
mod personality;
|
mod personality;
|
||||||
#[cfg(feature = "personality-dummy")]
|
#[cfg(feature = "personality-dummy")]
|
||||||
|
51
src/print.rs
Normal file
51
src/print.rs
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
pub use crate::{eprint, eprintln, print, println};
|
||||||
|
|
||||||
|
#[doc(hidden)]
|
||||||
|
pub struct StdoutPrinter;
|
||||||
|
impl core::fmt::Write for StdoutPrinter {
|
||||||
|
fn write_str(&mut self, s: &str) -> core::fmt::Result {
|
||||||
|
unsafe { libc::printf(b"%.*s\0".as_ptr() as _, s.len() as i32, s.as_ptr()) };
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[doc(hidden)]
|
||||||
|
pub struct StderrPrinter;
|
||||||
|
impl core::fmt::Write for StderrPrinter {
|
||||||
|
fn write_str(&mut self, s: &str) -> core::fmt::Result {
|
||||||
|
unsafe { libc::write(libc::STDERR_FILENO, s.as_ptr() as _, s.len() as _) };
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! println {
|
||||||
|
($($arg:tt)*) => ({
|
||||||
|
use core::fmt::Write;
|
||||||
|
let _ = core::writeln!($crate::print::StdoutPrinter, $($arg)*);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! print {
|
||||||
|
($($arg:tt)*) => ({
|
||||||
|
use core::fmt::Write;
|
||||||
|
let _ = core::writeln!($crate::print::StdoutPrinter, $($arg)*);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! eprintln {
|
||||||
|
($($arg:tt)*) => ({
|
||||||
|
use core::fmt::Write;
|
||||||
|
let _ = core::writeln!($crate::print::StderrPrinter, $($arg)*);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! eprint {
|
||||||
|
($($arg:tt)*) => ({
|
||||||
|
use core::fmt::Write;
|
||||||
|
let _ = core::writeln!($crate::print::StderrPrinter, $($arg)*);
|
||||||
|
})
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user