Skip to content

Commit 9dece60

Browse files
committed
auto merge of #11375 : alexcrichton/rust/issue-11372, r=pcwalton
Closes #11372
2 parents 97005c0 + 75165f7 commit 9dece60

File tree

2 files changed

+16
-4
lines changed

2 files changed

+16
-4
lines changed

src/libstd/io/buffered.rs

+7-1
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ mod test {
322322
use io;
323323
use prelude::*;
324324
use super::*;
325-
use super::super::mem::{MemReader, MemWriter};
325+
use super::super::mem::{MemReader, MemWriter, BufReader};
326326
use Harness = extra::test::BenchHarness;
327327

328328
/// A type, free to create, primarily intended for benchmarking creation of wrappers that, just
@@ -526,6 +526,12 @@ mod test {
526526
assert_eq!(reader.read(buf), None);
527527
}
528528

529+
#[test]
530+
fn read_char_buffered() {
531+
let buf = [195u8, 159u8];
532+
let mut reader = BufferedReader::with_capacity(1, BufReader::new(buf));
533+
assert_eq!(reader.read_char(), Some('ß'));
534+
}
529535

530536
#[bench]
531537
fn bench_buffered_reader(bh: &mut Harness) {

src/libstd/io/mod.rs

+9-3
Original file line numberDiff line numberDiff line change
@@ -1212,9 +1212,15 @@ pub trait Buffer: Reader {
12121212
};
12131213
if width == 0 { return None } // not uf8
12141214
let mut buf = [0, ..4];
1215-
match self.read(buf.mut_slice_to(width)) {
1216-
Some(n) if n == width => {}
1217-
Some(..) | None => return None // read error
1215+
{
1216+
let mut start = 0;
1217+
loop {
1218+
match self.read(buf.mut_slice(start, width)) {
1219+
Some(n) if n == width - start => break,
1220+
Some(n) if n < width - start => { start += n; }
1221+
Some(..) | None => return None // read error
1222+
}
1223+
}
12181224
}
12191225
match str::from_utf8_opt(buf.slice_to(width)) {
12201226
Some(s) => Some(s.char_at(0)),

0 commit comments

Comments
 (0)