From d219d57acba452ac1cef6a5c08beb690917cc78d Mon Sep 17 00:00:00 2001
From: Tom Almeida <tommoa256@gmail.com>
Date: Thu, 9 Aug 2018 00:49:57 +0800
Subject: [PATCH] Fix an issue where _IONBF would cause an overflow error

---
 src/stdio/src/lib.rs | 6 +++++-
 tests/stdio/all.c    | 2 ++
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/src/stdio/src/lib.rs b/src/stdio/src/lib.rs
index 993a88ff..ec7960ed 100644
--- a/src/stdio/src/lib.rs
+++ b/src/stdio/src/lib.rs
@@ -99,7 +99,11 @@ impl FILE {
             return true;
         }
         self.read = None;
-        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 true;
     }
     pub fn write(&mut self, to_write: &[u8]) -> usize {
diff --git a/tests/stdio/all.c b/tests/stdio/all.c
index 45082936..118f4654 100644
--- a/tests/stdio/all.c
+++ b/tests/stdio/all.c
@@ -7,5 +7,7 @@ int main(int argc, char ** argv) {
 	ungetc('H', f);
 	char *in = malloc(30);
 	printf("%s\n", fgets(in, 30, f));
+	setvbuf(stdout, 0, _IONBF, 0);
+	printf("Hello\n");
 	return 0;
 }
-- 
GitLab