@@ -249,9 +249,9 @@ pub struct DirBuilder {
249
249
pub fn read < P : AsRef < Path > > ( path : P ) -> io:: Result < Vec < u8 > > {
250
250
fn inner ( path : & Path ) -> io:: Result < Vec < u8 > > {
251
251
let mut file = File :: open ( path) ?;
252
- let size = file. metadata ( ) . map ( |m| m. len ( ) ) . unwrap_or ( 0 ) ;
253
- let mut bytes = Vec :: with_capacity ( size as usize ) ;
254
- io:: default_read_to_end ( & mut file, & mut bytes) ?;
252
+ let size = file. metadata ( ) . map ( |m| m. len ( ) as usize ) . ok ( ) ;
253
+ let mut bytes = Vec :: with_capacity ( size. unwrap_or ( 0 ) ) ;
254
+ io:: default_read_to_end ( & mut file, & mut bytes, size ) ?;
255
255
Ok ( bytes)
256
256
}
257
257
inner ( path. as_ref ( ) )
@@ -289,9 +289,9 @@ pub fn read<P: AsRef<Path>>(path: P) -> io::Result<Vec<u8>> {
289
289
pub fn read_to_string < P : AsRef < Path > > ( path : P ) -> io:: Result < String > {
290
290
fn inner ( path : & Path ) -> io:: Result < String > {
291
291
let mut file = File :: open ( path) ?;
292
- let size = file. metadata ( ) . map ( |m| m. len ( ) ) . unwrap_or ( 0 ) ;
293
- let mut string = String :: with_capacity ( size as usize ) ;
294
- io:: default_read_to_string ( & mut file, & mut string) ?;
292
+ let size = file. metadata ( ) . map ( |m| m. len ( ) as usize ) . ok ( ) ;
293
+ let mut string = String :: with_capacity ( size. unwrap_or ( 0 ) ) ;
294
+ io:: default_read_to_string ( & mut file, & mut string, size ) ?;
295
295
Ok ( string)
296
296
}
297
297
inner ( path. as_ref ( ) )
@@ -732,12 +732,12 @@ impl fmt::Debug for File {
732
732
}
733
733
734
734
/// Indicates how much extra capacity is needed to read the rest of the file.
735
- fn buffer_capacity_required ( mut file : & File ) -> usize {
736
- let size = file. metadata ( ) . map ( |m| m. len ( ) ) . unwrap_or ( 0 ) ;
737
- let pos = file. stream_position ( ) . unwrap_or ( 0 ) ;
735
+ fn buffer_capacity_required ( mut file : & File ) -> Option < usize > {
736
+ let size = file. metadata ( ) . map ( |m| m. len ( ) ) . ok ( ) ? ;
737
+ let pos = file. stream_position ( ) . ok ( ) ? ;
738
738
// Don't worry about `usize` overflow because reading will fail regardless
739
739
// in that case.
740
- size. saturating_sub ( pos) as usize
740
+ Some ( size. saturating_sub ( pos) as usize )
741
741
}
742
742
743
743
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
@@ -761,14 +761,16 @@ impl Read for File {
761
761
762
762
// Reserves space in the buffer based on the file size when available.
763
763
fn read_to_end ( & mut self , buf : & mut Vec < u8 > ) -> io:: Result < usize > {
764
- buf. reserve ( buffer_capacity_required ( self ) ) ;
765
- io:: default_read_to_end ( self , buf)
764
+ let size = buffer_capacity_required ( self ) ;
765
+ buf. reserve ( size. unwrap_or ( 0 ) ) ;
766
+ io:: default_read_to_end ( self , buf, size)
766
767
}
767
768
768
769
// Reserves space in the buffer based on the file size when available.
769
770
fn read_to_string ( & mut self , buf : & mut String ) -> io:: Result < usize > {
770
- buf. reserve ( buffer_capacity_required ( self ) ) ;
771
- io:: default_read_to_string ( self , buf)
771
+ let size = buffer_capacity_required ( self ) ;
772
+ buf. reserve ( size. unwrap_or ( 0 ) ) ;
773
+ io:: default_read_to_string ( self , buf, size)
772
774
}
773
775
}
774
776
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
@@ -817,14 +819,16 @@ impl Read for &File {
817
819
818
820
// Reserves space in the buffer based on the file size when available.
819
821
fn read_to_end ( & mut self , buf : & mut Vec < u8 > ) -> io:: Result < usize > {
820
- buf. reserve ( buffer_capacity_required ( self ) ) ;
821
- io:: default_read_to_end ( self , buf)
822
+ let size = buffer_capacity_required ( self ) ;
823
+ buf. reserve ( size. unwrap_or ( 0 ) ) ;
824
+ io:: default_read_to_end ( self , buf, size)
822
825
}
823
826
824
827
// Reserves space in the buffer based on the file size when available.
825
828
fn read_to_string ( & mut self , buf : & mut String ) -> io:: Result < usize > {
826
- buf. reserve ( buffer_capacity_required ( self ) ) ;
827
- io:: default_read_to_string ( self , buf)
829
+ let size = buffer_capacity_required ( self ) ;
830
+ buf. reserve ( size. unwrap_or ( 0 ) ) ;
831
+ io:: default_read_to_string ( self , buf, size)
828
832
}
829
833
}
830
834
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
0 commit comments