diff options
| author | Arjan Topolovec <arjan.top@gmail.com> | 2014-07-11 00:51:14 +0200 |
|---|---|---|
| committer | Arjan Topolovec <arjan.top@gmail.com> | 2014-07-11 15:45:06 +0200 |
| commit | 30f07e9067beb931099588bb94b6efcc0d4aa489 (patch) | |
| tree | b4884a8af966222e73039943746855e61ce9606a /src/libstd/io | |
| parent | 8bbf598d50960087342667fc47f5d38f4a9c2165 (diff) | |
| download | rust-30f07e9067beb931099588bb94b6efcc0d4aa489.tar.gz rust-30f07e9067beb931099588bb94b6efcc0d4aa489.zip | |
Allow writes of length 0 to a full buffer
Diffstat (limited to 'src/libstd/io')
| -rw-r--r-- | src/libstd/io/mem.rs | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/libstd/io/mem.rs b/src/libstd/io/mem.rs index 7f9a1180785..1c0251c8369 100644 --- a/src/libstd/io/mem.rs +++ b/src/libstd/io/mem.rs @@ -259,8 +259,8 @@ impl<'a> Writer for BufWriter<'a> { #[inline] fn write(&mut self, buf: &[u8]) -> IoResult<()> { // return an error if the entire write does not fit in the buffer - let max_size = self.buf.len(); - if self.pos >= max_size || (self.pos + buf.len()) > max_size { + let cap = if self.pos >= self.buf.len() { 0 } else { self.buf.len() - self.pos }; + if buf.len() > cap { return Err(IoError { kind: io::OtherIoError, desc: "Trying to write past end of buffer", @@ -416,6 +416,8 @@ mod test { writer.write([1, 2, 3]).unwrap(); writer.write([4, 5, 6, 7]).unwrap(); assert_eq!(writer.tell(), Ok(8)); + writer.write([]).unwrap(); + assert_eq!(writer.tell(), Ok(8)); } assert_eq!(buf.as_slice(), &[0, 1, 2, 3, 4, 5, 6, 7]); } |
