Never return an error after a partial write

If LineWriter fails to flush, return the number of bytes written instead
of an error.

Fixes #32085
This commit is contained in:
Steven Allen 2016-03-07 16:35:37 -05:00
parent 388ccda455
commit 6ea8222913
1 changed files with 4 additions and 2 deletions

View File

@ -762,8 +762,10 @@ impl<W: Write> Write for LineWriter<W> {
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),