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