Skip to content

Commit af15856

Browse files
committed
---
yaml --- r: 162229 b: refs/heads/auto c: a31ad6b h: refs/heads/master i: 162227: 021a44a v: v3
1 parent 86b6501 commit af15856

File tree

4 files changed

+31
-18
lines changed

4 files changed

+31
-18
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503
1010
refs/tags/release-0.3.1: 495bae036dfe5ec6ceafd3312b4dca48741e845b
1111
refs/tags/release-0.4: e828ea2080499553b97dfe33b3f4d472b4562ad7
1212
refs/tags/release-0.5: 7e3bcfbf21278251ee936ad53e92e9b719702d73
13-
refs/heads/auto: 9b443289cf32cbcff16768614340f0c844675340
13+
refs/heads/auto: a31ad6bfcd55fd58218ab005be5eb7229de88ef9
1414
refs/heads/servo: af82457af293e2a842ba6b7759b70288da276167
1515
refs/tags/release-0.6: b4ebcfa1812664df5e142f0134a5faea3918544c
1616
refs/tags/0.1: b19db808c2793fe2976759b85a355c3ad8c8b336

branches/auto/src/libstd/io/mem.rs

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -278,20 +278,29 @@ impl<'a> BufWriter<'a> {
278278

279279
impl<'a> Writer for BufWriter<'a> {
280280
#[inline]
281-
fn write(&mut self, buf: &[u8]) -> IoResult<()> {
282-
// return an error if the entire write does not fit in the buffer
283-
let cap = if self.pos >= self.buf.len() { 0 } else { self.buf.len() - self.pos };
284-
if buf.len() > cap {
285-
return Err(IoError {
286-
kind: io::OtherIoError,
287-
desc: "Trying to write past end of buffer",
288-
detail: None
289-
})
281+
fn write(&mut self, src: &[u8]) -> IoResult<()> {
282+
let dst = self.buf[mut self.pos..];
283+
let dst_len = dst.len();
284+
285+
if dst_len == 0 {
286+
return Err(io::standard_error(io::EndOfFile));
290287
}
291288

292-
slice::bytes::copy_memory(self.buf[mut self.pos..], buf);
293-
self.pos += buf.len();
294-
Ok(())
289+
let src_len = src.len();
290+
291+
if dst_len >= src_len {
292+
slice::bytes::copy_memory(dst, src);
293+
294+
self.pos += src_len;
295+
296+
Ok(())
297+
} else {
298+
slice::bytes::copy_memory(dst, src[..dst_len]);
299+
300+
self.pos += dst_len;
301+
302+
Err(io::standard_error(io::ShortWrite(dst_len)))
303+
}
295304
}
296305
}
297306

@@ -302,7 +311,7 @@ impl<'a> Seek for BufWriter<'a> {
302311
#[inline]
303312
fn seek(&mut self, pos: i64, style: SeekStyle) -> IoResult<()> {
304313
let new = try!(combine(style, self.pos, self.buf.len(), pos));
305-
self.pos = new as uint;
314+
self.pos = min(new as uint, self.buf.len());
306315
Ok(())
307316
}
308317
}
@@ -419,7 +428,7 @@ mod test {
419428

420429
#[test]
421430
fn test_buf_writer() {
422-
let mut buf = [0 as u8, ..8];
431+
let mut buf = [0 as u8, ..9];
423432
{
424433
let mut writer = BufWriter::new(&mut buf);
425434
assert_eq!(writer.tell(), Ok(0));
@@ -431,9 +440,10 @@ mod test {
431440
writer.write(&[]).unwrap();
432441
assert_eq!(writer.tell(), Ok(8));
433442

434-
assert!(writer.write(&[1]).is_err());
443+
assert_eq!(writer.write(&[8, 9]).unwrap_err().kind, io::ShortWrite(1));
444+
assert_eq!(writer.write(&[10]).unwrap_err().kind, io::EndOfFile);
435445
}
436-
let b: &[_] = &[0, 1, 2, 3, 4, 5, 6, 7];
446+
let b: &[_] = &[0, 1, 2, 3, 4, 5, 6, 7, 8];
437447
assert_eq!(buf.as_slice(), b);
438448
}
439449

@@ -474,7 +484,7 @@ mod test {
474484

475485
match writer.write(&[0, 0]) {
476486
Ok(..) => panic!(),
477-
Err(e) => assert_eq!(e.kind, io::OtherIoError),
487+
Err(e) => assert_eq!(e.kind, io::ShortWrite(1)),
478488
}
479489
}
480490

branches/auto/src/test/run-pass/issue-16671.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11+
// ignore-android seems to block forever
12+
1113
#![forbid(warnings)]
1214

1315
// Pretty printing tests complain about `use std::predule::*`

branches/auto/src/test/run-pass/wait-forked-but-failed-child.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
// option. This file may not be copied, modified, or distributed
99
// except according to those terms.
1010

11+
// ignore-test
1112

1213
extern crate libc;
1314

0 commit comments

Comments
 (0)