diff --git a/src/header/stdio/mod.rs b/src/header/stdio/mod.rs
index e97aebdb5a740d9b450db69f3030bb0f1560f0de..8ed46f147bb1e7aeba5f85ab412561a9561e9beb 100644
--- a/src/header/stdio/mod.rs
+++ b/src/header/stdio/mod.rs
@@ -251,8 +251,24 @@ pub unsafe extern "C" fn ferror(stream: *mut FILE) -> c_int {
 /// itself.
 #[no_mangle]
 pub unsafe extern "C" fn fflush(stream: *mut FILE) -> c_int {
-    let mut stream = (*stream).lock();
-    stream.flush().is_err() as c_int
+    if stream.is_null() {
+        //TODO: flush all files!
+
+        if fflush(stdout) != 0 {
+            return EOF;
+        }
+
+        if fflush(stderr) != 0 {
+            return EOF;
+        }
+    } else {
+        let mut stream = (*stream).lock();
+        if stream.flush().is_err() {
+            return EOF;
+        }
+    }
+
+    0
 }
 
 /// Get a single char from a stream