@@ -743,21 +743,20 @@ impl<'a> Filesystem<'a> {
743
743
}
744
744
}
745
745
FatType :: FAT16 => {
746
- let fat = [ 0_u16 ; SectorBuf :: len ( ) / 2 ] ;
746
+ let mut data = SectorBuf :: new ( ) ;
747
747
748
748
let fat_offset = cluster * 2 ;
749
749
let fat_sector = self . first_fat_sector + ( fat_offset / self . bytes_per_sector ) ;
750
750
let offset = fat_offset % self . bytes_per_sector ;
751
751
752
- let data = unsafe {
753
- core:: slice:: from_raw_parts_mut ( fat. as_ptr ( ) as * mut u8 , SectorBuf :: len ( ) )
754
- } ;
755
- match self . read ( u64:: from ( fat_sector) , data) {
752
+ match self . read ( u64:: from ( fat_sector) , data. as_mut_bytes ( ) ) {
756
753
Ok ( _) => { }
757
754
Err ( e) => return Err ( Error :: Block ( e) ) ,
758
755
} ;
759
756
760
- let next_cluster = fat[ ( offset / 2 ) as usize ] ;
757
+ let bytes = data. as_bytes ( ) ;
758
+ let next_cluster_raw = [ bytes[ offset as usize ] , bytes[ ( offset + 1 ) as usize ] ] ;
759
+ let next_cluster = u16:: from_le_bytes ( next_cluster_raw) ;
761
760
762
761
if next_cluster >= 0xfff8 {
763
762
Err ( Error :: EndOfFile )
@@ -766,22 +765,25 @@ impl<'a> Filesystem<'a> {
766
765
}
767
766
}
768
767
FatType :: FAT32 => {
769
- let fat = [ 0_u32 ; SectorBuf :: len ( ) / 4 ] ;
768
+ let mut data = SectorBuf :: new ( ) ;
770
769
771
770
let fat_offset = cluster * 4 ;
772
771
let fat_sector = self . first_fat_sector + ( fat_offset / self . bytes_per_sector ) ;
773
772
let offset = fat_offset % self . bytes_per_sector ;
774
773
775
- let data = unsafe {
776
- core:: slice:: from_raw_parts_mut ( fat. as_ptr ( ) as * mut u8 , SectorBuf :: len ( ) )
777
- } ;
778
-
779
- match self . read ( u64:: from ( fat_sector) , data) {
774
+ match self . read ( u64:: from ( fat_sector) , data. as_mut_bytes ( ) ) {
780
775
Ok ( _) => { }
781
776
Err ( e) => return Err ( Error :: Block ( e) ) ,
782
777
} ;
783
778
784
- let next_cluster_raw = fat[ ( offset / 4 ) as usize ] ;
779
+ let bytes = data. as_bytes ( ) ;
780
+ let next_cluster_raw = [
781
+ bytes[ offset as usize ] ,
782
+ bytes[ ( offset + 1 ) as usize ] ,
783
+ bytes[ ( offset + 2 ) as usize ] ,
784
+ bytes[ ( offset + 3 ) as usize ] ,
785
+ ] ;
786
+ let next_cluster_raw = u32:: from_le_bytes ( next_cluster_raw) ;
785
787
let next_cluster = next_cluster_raw & 0x0fff_ffff ;
786
788
if next_cluster >= 0x0fff_fff8 {
787
789
Err ( Error :: EndOfFile )
0 commit comments