console: Ensure only 1 console exists at a time Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
diff --git a/src/console.rs b/src/console.rs index c13fb26..4d6e80a 100644 --- a/src/console.rs +++ b/src/console.rs
@@ -41,8 +41,14 @@ allow_buffer: [u8; 64], } -pub fn get_global_console() -> Option<&'static mut Console> { - unsafe { CONSOLE.as_mut() } +pub fn get_global_console() -> Option<Console> { + unsafe { + if let Some(con) = CONSOLE.take() { + Some(con) + } else { + None + } + } } impl Console { @@ -83,7 +89,7 @@ Ok(()) } - fn set_global_console(self) { + pub fn set_global_console(self) { unsafe { CONSOLE = Some(self); } @@ -103,15 +109,17 @@ println!("") }); ($msg:expr) => ({ - if let Some(console) = $crate::console::get_global_console() { + if let Some(mut console) = $crate::console::get_global_console() { use core::fmt::Write; let _ = writeln!(console, $msg); + console.set_global_console(); } }); ($fmt:expr, $($arg:tt)+) => ({ - if let Some(console) = $crate::console::get_global_console() { + if let Some(mut console) = $crate::console::get_global_console() { use core::fmt::Write; let _ = writeln!(console, "{}", format_args!($fmt, $($arg)+)); + console.set_global_console(); } }); } @@ -123,15 +131,17 @@ print!("") }); ($msg:expr) => ({ - if let Some(console) = $crate::console::get_global_console() { + if let Some(mut console) = $crate::console::get_global_console() { use core::fmt::Write; let _ = write!(console, $msg); + console.set_global_console(); } }); ($fmt:expr, $($arg:tt)+) => ({ - if let Some(console) = $crate::console::get_global_console() { + if let Some(mut console) = $crate::console::get_global_console() { use core::fmt::Write; let _ = write!(console, "{}", format_args!($fmt, $($arg)+)); + console.set_global_console(); } }); }