@@ -119,14 +119,14 @@ impl MmapOptions {
119
119
/// Returns the configured length, or the length of the provided file.
120
120
fn get_len ( & self , file : & File ) -> Result < usize > {
121
121
self . len . map ( Ok ) . unwrap_or_else ( || {
122
- let len = file. metadata ( ) ?. len ( ) ;
122
+ let len = file. metadata ( ) ?. len ( ) - self . offset ;
123
123
if len > ( usize:: MAX as u64 ) {
124
124
return Err ( Error :: new (
125
125
ErrorKind :: InvalidData ,
126
- "file length overflows usize" ,
126
+ "memory map length overflows usize" ,
127
127
) ) ;
128
128
}
129
- Ok ( ( len - self . offset ) as usize )
129
+ Ok ( len as usize )
130
130
} )
131
131
}
132
132
@@ -820,14 +820,11 @@ mod test {
820
820
let len = 5432 ;
821
821
file. set_len ( offset + len as u64 ) . unwrap ( ) ;
822
822
823
- // Check auto-length mmap. The file length exceeds 4GiB, so this fails on 32-bit platforms.
824
- #[ cfg( target_pointer_width = "64" ) ]
825
- {
826
- let mmap = unsafe { MmapOptions :: new ( ) . offset ( offset) . map_mut ( & file) . unwrap ( ) } ;
827
- assert_eq ! ( len, mmap. len( ) ) ;
828
- }
823
+ // Check inferred length mmap.
824
+ let mmap = unsafe { MmapOptions :: new ( ) . offset ( offset) . map_mut ( & file) . unwrap ( ) } ;
825
+ assert_eq ! ( len, mmap. len( ) ) ;
829
826
830
- // Check explicit length mmap. This should succeed on any platform.
827
+ // Check explicit length mmap.
831
828
let mut mmap = unsafe {
832
829
MmapOptions :: new ( )
833
830
. offset ( offset)
0 commit comments