diff options
| author | Steven Allen <steven@stebalien.com> | 2016-03-07 16:35:37 -0500 |
|---|---|---|
| committer | Steven Allen <steven@stebalien.com> | 2016-03-07 16:35:37 -0500 |
| commit | 6ea8222913de9f628edac825c1f3d599762aa96f (patch) | |
| tree | 9e57e2a14fb2723e11cb2652cc8359948347bc49 | |
| parent | 388ccda455140e51456980efc07d175c19dcf005 (diff) | |
| download | rust-6ea8222913de9f628edac825c1f3d599762aa96f.tar.gz rust-6ea8222913de9f628edac825c1f3d599762aa96f.zip | |
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
| -rw-r--r-- | src/libstd/io/buffered.rs | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/libstd/io/buffered.rs b/src/libstd/io/buffered.rs index ccebf3682c2..bc26b63c153 100644 --- a/src/libstd/io/buffered.rs +++ b/src/libstd/io/buffered.rs @@ -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), |
