Skip to content

Commit 1d7408a

Browse files
committed
---
yaml --- r: 97951 b: refs/heads/master c: 75165f7 h: refs/heads/master i: 97949: 4b6b2df 97947: c052af4 97943: c22801b 97935: 49bcca7 97919: fc3a7f5 v: v3
1 parent 0c28fee commit 1d7408a

File tree

3 files changed

+17
-5
lines changed

3 files changed

+17
-5
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
refs/heads/master: 97005c0068f22032cbc30205a25dc88851eba424
2+
refs/heads/master: 75165f78de69379bd765a85ab01e20ac9eef7893
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: b6400f998497c3958f40997a71756ead344a776d
55
refs/heads/try: c274a6888410ce3e357e014568b43310ed787d36

trunk/src/libstd/io/buffered.rs

Lines changed: 7 additions & 1 deletion
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) {

trunk/src/libstd/io/mod.rs

Lines changed: 9 additions & 3 deletions
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)