From a1ebe321d6dcaa39feea57bf1ada07fbe48a313d Mon Sep 17 00:00:00 2001
From: Tom Almeida <tommoa256@gmail.com>
Date: Thu, 9 Aug 2018 01:37:50 +0800
Subject: [PATCH] Ensure that _IONBF would be respected when writing

---
 src/stdio/src/lib.rs | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/stdio/src/lib.rs b/src/stdio/src/lib.rs
index ec7960ed..924c13f4 100644
--- a/src/stdio/src/lib.rs
+++ b/src/stdio/src/lib.rs
@@ -120,7 +120,11 @@ impl FILE {
                     platform::write(self.fd, &f_buf[advance..]) + platform::write(self.fd, to_write)
                 };
                 if count == rem as isize {
-                    self.write = Some((self.unget, self.unget, self.buf.len() - 1));
+                    self.write = if self.buf.len() == 0 {
+                        Some((0, 0, 0))
+                    } else {
+                        Some((self.unget, self.unget, self.buf.len() - 1))
+                    };
                     return to_write.len();
                 }
                 if count < 0 {
@@ -852,6 +856,11 @@ pub extern "C" fn setvbuf(stream: &mut FILE, buf: *mut c_char, mode: c_int, size
         if mode != _IONBF {
             vec![0u8; 1]
         } else {
+            if let Some(_) = stream.write {
+                stream.write = Some((0, 0, 0));
+            } else if let Some(_) = stream.read {
+                stream.read = Some((0, 0));
+            }
             Vec::new()
         }
     } else {
-- 
GitLab