From 044671bc0499a5c0a67bc029031d3f2caabd427c Mon Sep 17 00:00:00 2001 From: qookie Date: Fri, 28 Jun 2019 23:08:58 +0200 Subject: [PATCH] options/ansi: change puts implementation --- options/ansi/generic/stdio-stubs.cpp | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/options/ansi/generic/stdio-stubs.cpp b/options/ansi/generic/stdio-stubs.cpp index fa0a08a9..af58f340 100644 --- a/options/ansi/generic/stdio-stubs.cpp +++ b/options/ansi/generic/stdio-stubs.cpp @@ -802,10 +802,27 @@ int putchar(int c) { } int puts(const char *string) { - if(fwrite(string, strlen(string), 1, stdout) != 1) - return EOF; - if(fwrite("\n", 1, 1, stdout) != 1) + auto file = static_cast(stdout); + + size_t progress = 0; + size_t len = strlen(string); + while(progress < len) { + size_t chunk; + if(file->write(string + progress, + len - progress, &chunk)) { + return EOF; + }else if(!chunk) { + return EOF; + } + + progress += chunk; + } + + size_t unused; + if (!file->write("\n", 1, &unused)) { return EOF; + } + return 1; }