From 212dcfa5928425ae48a42f3c4392fcab21cc8017 Mon Sep 17 00:00:00 2001 From: Philipp Oppermann Date: Wed, 26 Oct 2016 09:07:55 +0200 Subject: [PATCH] Make print_error safe by using the global writer This is now possible since we fixed the deadlock problem. --- src/vga_buffer.rs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/vga_buffer.rs b/src/vga_buffer.rs index 1d9d117e..fc16097a 100644 --- a/src/vga_buffer.rs +++ b/src/vga_buffer.rs @@ -43,16 +43,15 @@ pub fn clear_screen() { } } -pub unsafe fn print_error(fmt: fmt::Arguments) { +pub fn print_error(fmt: fmt::Arguments) { use core::fmt::Write; + use core::mem; - let mut writer = Writer { - column_position: 0, - color_code: ColorCode::new(Color::Red, Color::Black), - buffer: Unique::new(0xb8000 as *mut _), - }; - writer.new_line(); - writer.write_fmt(fmt); + let mut writer = WRITER.lock(); + let red = ColorCode::new(Color::Red, Color::Black); + let default_color = mem::replace(&mut writer.color_code, red); + writer.write_fmt(fmt).unwrap(); + writer.color_code = default_color; } #[allow(dead_code)]