From 972f2e585528515eaab4bee7270acda7f7375398 Mon Sep 17 00:00:00 2001 From: Kevin Ballard Date: Mon, 24 Mar 2014 23:22:23 -0700 Subject: io: Add .read_at_least() to Reader Reader.read_at_least() ensures that at least a given number of bytes have been read. The most common use-case for this is ensuring at least 1 byte has been read. If the reader returns 0 enough times in a row, a new error kind NoProgress will be returned instead of looping infinitely. This change is necessary in order to properly support Readers that repeatedly return 0, either because they're broken, or because they're attempting to do a non-blocking read on some resource that never becomes available. Also add .push() and .push_at_least() methods. push() is like read() but the results are appended to the passed Vec. Remove Reader.fill() and Reader.push_exact() as they end up being thin wrappers around read_at_least() and push_at_least(). [breaking-change] --- src/libstd/io/extensions.rs | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) (limited to 'src/libstd/io/extensions.rs') diff --git a/src/libstd/io/extensions.rs b/src/libstd/io/extensions.rs index bb4bd50815a..29afd2b1d9b 100644 --- a/src/libstd/io/extensions.rs +++ b/src/libstd/io/extensions.rs @@ -342,39 +342,39 @@ mod test { } #[test] - fn push_exact() { - let mut reader = MemReader::new(vec!(10, 11, 12, 13)); - let mut buf = vec!(8, 9); - reader.push_exact(&mut buf, 4).unwrap(); - assert!(buf == vec!(8, 9, 10, 11, 12, 13)); + fn push_at_least() { + let mut reader = MemReader::new(vec![10, 11, 12, 13]); + let mut buf = vec![8, 9]; + assert!(reader.push_at_least(4, 4, &mut buf).is_ok()); + assert!(buf == vec![8, 9, 10, 11, 12, 13]); } #[test] - fn push_exact_partial() { + fn push_at_least_partial() { let mut reader = PartialReader { count: 0, }; - let mut buf = vec!(8, 9); - reader.push_exact(&mut buf, 4).unwrap(); - assert!(buf == vec!(8, 9, 10, 11, 12, 13)); + let mut buf = vec![8, 9]; + assert!(reader.push_at_least(4, 4, &mut buf).is_ok()); + assert!(buf == vec![8, 9, 10, 11, 12, 13]); } #[test] - fn push_exact_eof() { - let mut reader = MemReader::new(vec!(10, 11)); - let mut buf = vec!(8, 9); - assert!(reader.push_exact(&mut buf, 4).is_err()); - assert!(buf == vec!(8, 9, 10, 11)); + fn push_at_least_eof() { + let mut reader = MemReader::new(vec![10, 11]); + let mut buf = vec![8, 9]; + assert!(reader.push_at_least(4, 4, &mut buf).is_err()); + assert!(buf == vec![8, 9, 10, 11]); } #[test] - fn push_exact_error() { + fn push_at_least_error() { let mut reader = ErroringLaterReader { count: 0, }; - let mut buf = vec!(8, 9); - assert!(reader.push_exact(&mut buf, 4).is_err()); - assert!(buf == vec!(8, 9, 10)); + let mut buf = vec![8, 9]; + assert!(reader.push_at_least(4, 4, &mut buf).is_err()); + assert!(buf == vec![8, 9, 10]); } #[test] -- cgit 1.4.1-3-g733a5