Skip to content
Snippets Groups Projects
Verified Commit b4329964 authored by Tom Almeida's avatar Tom Almeida Committed by jD91mZM2
Browse files

Fix buffering issue with large output through stdio

parent 29b4c19d
No related branches found
No related tags found
No related merge requests found
......@@ -97,7 +97,7 @@ pub fn fwritex(buf: *const u8, l: size_t, stream: &mut FILE) -> size_t {
// We can't write to this stream
return 0;
}
if let Some((wbase, wpos, wend)) = stream.write {
if let Some((wbase, mut wpos, wend)) = stream.write {
if l > wend - wpos {
// We can't fit all of buf in the buffer
return stream.write(buf);
......@@ -110,6 +110,11 @@ pub fn fwritex(buf: *const u8, l: size_t, stream: &mut FILE) -> size_t {
}
if i > 0 {
let n = stream.write(buf);
match stream.write {
Some((_, new_wpos, _)) => wpos = new_wpos,
None => unreachable!("stream.write should never be None after a write call")
}
if n < i {
return n;
}
......
......@@ -15,6 +15,7 @@ EXPECT_BINS=\
setjmp \
signal \
stdio/all \
stdio/buffer \
stdio/freopen \
stdio/fwrite \
stdio/getc_unget \
......
#include <stdio.h>
int main() {
// Tests what used to be a bug with buffering
fwrite("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", 1, 999, stdout);
fwrite("Test\n", 1, 5, stdout);
fwrite("Hello\nWorld\n", 1, 12, stdout);
puts("It works");
puts("No buffering issues here");
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment