diff options
| author | Oliver Schneider <git1984941651981@oli-obk.de> | 2015-01-16 10:49:35 +0100 |
|---|---|---|
| committer | Oliver Schneider <git1984941651981@oli-obk.de> | 2015-01-20 14:18:17 +0100 |
| commit | f2b8404bcb095235efeaf7a39536cd55172ac18e (patch) | |
| tree | add4fa880e8d82ea08df8fad0f6c16e9aa12a53f /src/libstd | |
| parent | 3bf41dafcfb6c979efb4e2438e047e1a54045eec (diff) | |
| download | rust-f2b8404bcb095235efeaf7a39536cd55172ac18e.tar.gz rust-f2b8404bcb095235efeaf7a39536cd55172ac18e.zip | |
prettier Buffer::read_until
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/io/mod.rs | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/src/libstd/io/mod.rs b/src/libstd/io/mod.rs index e2b71cd43af..88be8d1189e 100644 --- a/src/libstd/io/mod.rs +++ b/src/libstd/io/mod.rs @@ -1436,33 +1436,31 @@ pub trait Buffer: Reader { fn read_until(&mut self, byte: u8) -> IoResult<Vec<u8>> { let mut res = Vec::new(); - let mut used; loop { - { + let (done, used) = { let available = match self.fill_buf() { Ok(n) => n, Err(ref e) if res.len() > 0 && e.kind == EndOfFile => { - used = 0; - break + return Ok(res); } Err(e) => return Err(e) }; match available.iter().position(|&b| b == byte) { Some(i) => { res.push_all(&available[..(i + 1)]); - used = i + 1; - break + (true, i + 1) } None => { res.push_all(available); - used = available.len(); + (false, available.len()) } } + }; + buffer.consume(used); + if done { + return Ok(res); } - self.consume(used); } - self.consume(used); - Ok(res) } /// Reads the next utf8-encoded character from the underlying stream. |
