diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2015-01-21 09:16:33 -0800 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2015-01-21 09:16:33 -0800 |
| commit | 9ef5484783da1c1c2e8e3efe44ba2a922e8f63e1 (patch) | |
| tree | 96edc31091e1def48d505541f4e4ea8fecae95f1 /src/libstd | |
| parent | bf77f6ca0393021b449646972645e9d1bc211aca (diff) | |
| parent | f2b8404bcb095235efeaf7a39536cd55172ac18e (diff) | |
| download | rust-9ef5484783da1c1c2e8e3efe44ba2a922e8f63e1.tar.gz rust-9ef5484783da1c1c2e8e3efe44ba2a922e8f63e1.zip | |
rollup merge of #21423: oli-obk/prettier_read_until
Conflicts: src/libstd/io/mod.rs
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 1621a902f39..a1a67ff051d 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. |
