@@ -90,7 +90,11 @@ pub fn csplit<T>(options: &CsplitOptions, patterns: &[String], input: T) -> Resu
9090where
9191 T : BufRead ,
9292{
93- let mut input_iter = InputSplitter :: new ( input. lines ( ) . enumerate ( ) ) ;
93+ let enumerated_input_lines = input
94+ . lines ( )
95+ . enumerate ( )
96+ . map ( |( idx, result) | ( idx, result. map_err_context ( || "read error" . to_string ( ) ) ) ) ;
97+ let mut input_iter = InputSplitter :: new ( enumerated_input_lines) ;
9498 let mut split_writer = SplitWriter :: new ( options) ;
9599 let patterns: Vec < patterns:: Pattern > = patterns:: get_patterns ( patterns) ?;
96100 let ret = do_csplit ( & mut split_writer, patterns, & mut input_iter) ;
@@ -120,7 +124,7 @@ fn do_csplit<I>(
120124 input_iter : & mut InputSplitter < I > ,
121125) -> Result < ( ) , CsplitError >
122126where
123- I : Iterator < Item = ( usize , io :: Result < String > ) > ,
127+ I : Iterator < Item = ( usize , UResult < String > ) > ,
124128{
125129 // split the file based on patterns
126130 for pattern in patterns {
@@ -308,7 +312,7 @@ impl SplitWriter<'_> {
308312 input_iter : & mut InputSplitter < I > ,
309313 ) -> Result < ( ) , CsplitError >
310314 where
311- I : Iterator < Item = ( usize , io :: Result < String > ) > ,
315+ I : Iterator < Item = ( usize , UResult < String > ) > ,
312316 {
313317 input_iter. rewind_buffer ( ) ;
314318 input_iter. set_size_of_buffer ( 1 ) ;
@@ -361,7 +365,7 @@ impl SplitWriter<'_> {
361365 input_iter : & mut InputSplitter < I > ,
362366 ) -> Result < ( ) , CsplitError >
363367 where
364- I : Iterator < Item = ( usize , io :: Result < String > ) > ,
368+ I : Iterator < Item = ( usize , UResult < String > ) > ,
365369 {
366370 if offset >= 0 {
367371 // The offset is zero or positive, no need for a buffer on the lines read.
@@ -456,7 +460,7 @@ impl SplitWriter<'_> {
456460/// This is used to pass matching lines to the next split and to support patterns with a negative offset.
457461struct InputSplitter < I >
458462where
459- I : Iterator < Item = ( usize , io :: Result < String > ) > ,
463+ I : Iterator < Item = ( usize , UResult < String > ) > ,
460464{
461465 iter : I ,
462466 buffer : Vec < <I as Iterator >:: Item > ,
@@ -469,7 +473,7 @@ where
469473
470474impl < I > InputSplitter < I >
471475where
472- I : Iterator < Item = ( usize , io :: Result < String > ) > ,
476+ I : Iterator < Item = ( usize , UResult < String > ) > ,
473477{
474478 fn new ( iter : I ) -> Self {
475479 Self {
@@ -533,7 +537,7 @@ where
533537
534538impl < I > Iterator for InputSplitter < I >
535539where
536- I : Iterator < Item = ( usize , io :: Result < String > ) > ,
540+ I : Iterator < Item = ( usize , UResult < String > ) > ,
537541{
538542 type Item = <I as Iterator >:: Item ;
539543
0 commit comments