]> git.lizzy.rs Git - rust.git/commitdiff
Never return an error after a partial write
authorSteven Allen <steven@stebalien.com>
Mon, 7 Mar 2016 21:35:37 +0000 (16:35 -0500)
committerSteven Allen <steven@stebalien.com>
Mon, 7 Mar 2016 21:35:37 +0000 (16:35 -0500)
If LineWriter fails to flush, return the number of bytes written instead
of an error.

Fixes #32085

src/libstd/io/buffered.rs

index ccebf3682c217c2683dc2a6450566d59915cc531..bc26b63c153c8b8c3c4d82dccb40f238d8da5094 100644 (file)
@@ -762,8 +762,10 @@ fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
         match memchr::memrchr(b'\n', buf) {
             Some(i) => {
                 let n = try!(self.inner.write(&buf[..i + 1]));
-                if n != i + 1 { return Ok(n) }
-                try!(self.inner.flush());
+                if n != i + 1 || self.inner.flush().is_err() {
+                    // Do not return errors on partial writes.
+                    return Ok(n);
+                }
                 self.inner.write(&buf[i + 1..]).map(|i| n + i)
             }
             None => self.inner.write(buf),