aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorFenrir <[email protected]>2016-06-03 16:20:47 -0700
committerFenrir <[email protected]>2016-06-03 16:20:47 -0700
commit2feaf8f636668641eb16e25208e53b718e191f66 (patch)
tree4b950e50860283a4bc69cdd59794863d038e82b2 /src
parentOverhauled and simplified API. Now apps no longer hang on exit! (diff)
downloadctru-rs-2feaf8f636668641eb16e25208e53b718e191f66.tar.xz
ctru-rs-2feaf8f636668641eb16e25208e53b718e191f66.zip
core::fmt::Write support for the console
Diffstat (limited to 'src')
-rw-r--r--src/console.rs36
-rw-r--r--src/services/apt.rs2
2 files changed, 17 insertions, 21 deletions
diff --git a/src/console.rs b/src/console.rs
index a717aa5..0d0535a 100644
--- a/src/console.rs
+++ b/src/console.rs
@@ -1,34 +1,17 @@
use libctru::console::{consoleInit, consoleClear};
use libctru::gfx;
+use libctru::libc;
+use core::fmt::{self, Write};
use core::default::Default;
use core::marker::PhantomData;
use core::ptr;
-extern "C" {
- fn putchar(ch: u8) -> i32;
-}
-
pub struct Console {
pd: PhantomData<()>,
}
impl Console {
- pub fn print<'a>(&mut self, s: &'a str) {
- unsafe {
- for ch in s.as_bytes().iter() {
- putchar(*ch);
- }
- }
- }
-
- pub fn println<'a>(&mut self, s: &'a str) {
- unsafe {
- self.print(s);
- putchar('\n' as u8);
- }
- }
-
pub fn clear(&mut self) {
unsafe { consoleClear() }
}
@@ -36,7 +19,20 @@ impl Console {
impl Default for Console {
fn default() -> Self {
- unsafe { consoleInit(gfx::gfxScreen_t::GFX_TOP, ptr::null_mut()); }
+ unsafe {
+ consoleInit(gfx::gfxScreen_t::GFX_TOP, ptr::null_mut());
+ }
Console { pd: PhantomData }
}
}
+
+impl Write for Console {
+ fn write_str(&mut self, s: &str) -> fmt::Result {
+ let ret = unsafe { libc::write(libc::STDOUT_FILENO, s.as_ptr() as *const _, s.len()) };
+ if ret == s.len() as isize {
+ Ok(())
+ } else {
+ Err(fmt::Error)
+ }
+ }
+}
diff --git a/src/services/apt.rs b/src/services/apt.rs
index b6efc86..8c891a6 100644
--- a/src/services/apt.rs
+++ b/src/services/apt.rs
@@ -79,7 +79,7 @@ impl Apt {
}
pub fn main_loop(&mut self) -> bool {
- unsafe {
+ unsafe {
match apt::aptMainLoop() {
1 => true,
0 => false,