aboutsummaryrefslogtreecommitdiffstats
path: root/src/fs/io/BufferedOutputStream.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/fs/io/BufferedOutputStream.cxx')
-rw-r--r--src/fs/io/BufferedOutputStream.cxx5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/fs/io/BufferedOutputStream.cxx b/src/fs/io/BufferedOutputStream.cxx
index 7d3cd3815..2268eb50c 100644
--- a/src/fs/io/BufferedOutputStream.cxx
+++ b/src/fs/io/BufferedOutputStream.cxx
@@ -41,17 +41,22 @@ bool
BufferedOutputStream::Write(const void *data, size_t size)
{
if (gcc_unlikely(last_error.IsDefined()))
+ /* the stream has already failed */
return false;
+ /* try to append to the current buffer */
if (AppendToBuffer(data, size))
return true;
+ /* not enough room in the buffer - flush it */
if (!Flush())
return false;
+ /* see if there's now enough room */
if (AppendToBuffer(data, size))
return true;
+ /* too large for the buffer: direct write */
return os.Write(data, size, last_error);
}