rollup merge of #21423: oli-obk/prettier_read_until

Conflicts:
	src/libstd/io/mod.rs
This commit is contained in:
Alex Crichton 2015-01-21 09:16:33 -08:00
commit 9ef5484783
1 changed files with 8 additions and 10 deletions

View File

@ -1436,33 +1436,31 @@ pub trait Buffer: Reader {
fn read_until(&mut self, byte: u8) -> IoResult<Vec<u8>> { fn read_until(&mut self, byte: u8) -> IoResult<Vec<u8>> {
let mut res = Vec::new(); let mut res = Vec::new();
let mut used;
loop { loop {
{ let (done, used) = {
let available = match self.fill_buf() { let available = match self.fill_buf() {
Ok(n) => n, Ok(n) => n,
Err(ref e) if res.len() > 0 && e.kind == EndOfFile => { Err(ref e) if res.len() > 0 && e.kind == EndOfFile => {
used = 0; return Ok(res);
break
} }
Err(e) => return Err(e) Err(e) => return Err(e)
}; };
match available.iter().position(|&b| b == byte) { match available.iter().position(|&b| b == byte) {
Some(i) => { Some(i) => {
res.push_all(&available[..i + 1]); res.push_all(&available[..i + 1]);
used = i + 1; (true, i + 1)
break
} }
None => { None => {
res.push_all(available); 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. /// Reads the next utf8-encoded character from the underlying stream.