From 8374fcb4be31e92ee3025908030454e91e0ab721 Mon Sep 17 00:00:00 2001 From: Tom Almeida <tommoa256@gmail.com> Date: Sun, 11 Mar 2018 00:33:00 +0800 Subject: [PATCH] implemented fputc, fputs, and puts --- src/stdio/src/lib.rs | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/stdio/src/lib.rs b/src/stdio/src/lib.rs index 689642c54..a8f305a1a 100644 --- a/src/stdio/src/lib.rs +++ b/src/stdio/src/lib.rs @@ -105,12 +105,22 @@ pub extern "C" fn fopen(filename: *const c_char, mode: *const c_char) -> *mut FI #[no_mangle] pub extern "C" fn fputc(c: c_int, stream: *mut FILE) -> c_int { - unimplemented!(); + platform::FileWriter(stream as c_int).write_char(c as u8 as char).map_err(|_| return -1); + c } #[no_mangle] -pub extern "C" fn fputs(s: *const c_char, stream: *mut FILE) -> c_int { - unimplemented!(); +pub unsafe extern "C" fn fputs(s: *const c_char, stream: *mut FILE) -> c_int { + extern "C" { + fn strlen(s: *const c_char) -> size_t; + } + use core::{ str, slice }; + let len = strlen(s); + platform::FileWriter(stream as c_int).write_str(str::from_utf8_unchecked(slice::from_raw_parts( + s as *const u8, + len, + ))).map_err(|_| return -1); + len as i32 } #[no_mangle] @@ -245,8 +255,9 @@ pub unsafe extern "C" fn putchar_unlocked(c: c_int) -> c_int { } #[no_mangle] -pub extern "C" fn puts(s: *const c_char) -> c_int { - unimplemented!(); +pub unsafe extern "C" fn puts(s: *const c_char) -> c_int { + fputs(s, stdout); + putchar(b'\n' as c_int) } #[no_mangle] -- GitLab