diff --git a/src/stdio/src/lib.rs b/src/stdio/src/lib.rs
index ec7960ed7c406b3ceccb623f57894f46f16bcea6..924c13f4fd557173f5b5a9aacaac62ef5e124a75 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 {