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