@@ -1446,7 +1446,7 @@ impl<T: Read, U: Read> Read for Chain<T, U> {
1446
1446
impl < T : BufRead , U : BufRead > BufRead for Chain < T , U > {
1447
1447
fn fill_buf ( & mut self ) -> Result < & [ u8 ] > {
1448
1448
if !self . done_first {
1449
- match try! ( self . first . fill_buf ( ) ) {
1449
+ match self . first . fill_buf ( ) ? {
1450
1450
buf if buf. len ( ) == 0 => { self . done_first = true ; }
1451
1451
buf => return Ok ( buf) ,
1452
1452
}
@@ -1865,6 +1865,36 @@ mod tests {
1865
1865
assert_eq ! ( 0 , R . take( 0 ) . read( & mut buf) . unwrap( ) ) ;
1866
1866
}
1867
1867
1868
+ fn cmp_bufread < Br1 : BufRead , Br2 : BufRead > ( mut br1 : Br1 , mut br2 : Br2 , exp : & [ u8 ] ) {
1869
+ let mut cat = Vec :: new ( ) ;
1870
+ loop {
1871
+ let consume = {
1872
+ let buf1 = br1. fill_buf ( ) . unwrap ( ) ;
1873
+ let buf2 = br2. fill_buf ( ) . unwrap ( ) ;
1874
+ let minlen = if buf1. len ( ) < buf2. len ( ) { buf1. len ( ) } else { buf2. len ( ) } ;
1875
+ assert_eq ! ( buf1[ ..minlen] , buf2[ ..minlen] ) ;
1876
+ cat. extend_from_slice ( & buf1[ ..minlen] ) ;
1877
+ minlen
1878
+ } ;
1879
+ if consume == 0 {
1880
+ break ;
1881
+ }
1882
+ br1. consume ( consume) ;
1883
+ br2. consume ( consume) ;
1884
+ }
1885
+ assert_eq ! ( br1. fill_buf( ) . unwrap( ) . len( ) , 0 ) ;
1886
+ assert_eq ! ( br2. fill_buf( ) . unwrap( ) . len( ) , 0 ) ;
1887
+ assert_eq ! ( & cat[ ..] , & exp[ ..] )
1888
+ }
1889
+
1890
+ #[ test]
1891
+ fn chain_bufread ( ) {
1892
+ let testdata = b"ABCDEFGHIJKL" ;
1893
+ let chain1 = ( & testdata[ ..3 ] ) . chain ( & testdata[ 3 ..6 ] ) . chain ( & testdata[ 6 ..9 ] ) . chain ( & testdata[ 9 ..] ) ;
1894
+ let chain2 = ( & testdata[ ..4 ] ) . chain ( & testdata[ 4 ..8 ] ) . chain ( & testdata[ 8 ..] ) ;
1895
+ cmp_bufread ( chain1, chain2, & testdata[ ..] ) ;
1896
+ }
1897
+
1868
1898
#[ bench]
1869
1899
fn bench_read_to_end ( b : & mut test:: Bencher ) {
1870
1900
b. iter ( || {
0 commit comments