@@ -32,9 +32,8 @@ struct Bpb {
3232}
3333
3434impl Bpb {
35- fn parse < D : Read + Seek > ( disk : & mut D ) -> Self {
36- disk. seek ( SeekFrom :: Start ( 0 ) ) ;
37- let raw = unsafe { disk. read_exact ( 512 ) } ;
35+ fn parse < D : Read > ( disk : & mut D ) -> Self {
36+ let raw = unsafe { disk. read_exact_at ( 512 , 0 ) } ;
3837
3938 let bytes_per_sector = u16:: from_le_bytes ( raw[ 11 ..13 ] . try_into ( ) . unwrap ( ) ) ;
4039 let sectors_per_cluster = raw[ 13 ] ;
@@ -256,7 +255,7 @@ struct Traverser<'a, D> {
256255
257256impl < D > Traverser < ' _ , D >
258257where
259- D : Read + Seek ,
258+ D : Read ,
260259{
261260 fn next_cluster ( & mut self ) -> Result < Option < Cluster > , ( ) > {
262261 let entry = classify_fat_entry (
@@ -286,7 +285,7 @@ where
286285
287286impl < D > Iterator for Traverser < ' _ , D >
288287where
289- D : Read + Seek ,
288+ D : Read ,
290289{
291290 type Item = Result < Cluster , ( ) > ;
292291
@@ -476,28 +475,25 @@ enum FileFatEntry {
476475
477476fn fat_entry_of_nth_cluster < D > ( disk : & mut D , fat_type : FatType , fat_start : u64 , n : u32 ) -> u32
478477where
479- D : Seek + Read ,
478+ D : Read ,
480479{
481480 debug_assert ! ( n >= 2 ) ;
482481 match fat_type {
483482 FatType :: Fat32 => {
484483 let base = n as u64 * 4 ;
485- disk. seek ( SeekFrom :: Start ( fat_start + base) ) ;
486- let buf = unsafe { disk. read_exact ( 4 ) } ;
484+ let buf = unsafe { disk. read_exact_at ( 4 , fat_start + base) } ;
487485 let buf: [ u8 ; 4 ] = buf. try_into ( ) . unwrap ( ) ;
488486 u32:: from_le_bytes ( buf) & 0x0FFFFFFF
489487 }
490488 FatType :: Fat16 => {
491489 let base = n as u64 * 2 ;
492- disk. seek ( SeekFrom :: Start ( fat_start + base) ) ;
493- let buf = unsafe { disk. read_exact ( 2 ) } ;
490+ let buf = unsafe { disk. read_exact_at ( 2 , fat_start + base) } ;
494491 let buf: [ u8 ; 2 ] = buf. try_into ( ) . unwrap ( ) ;
495492 u16:: from_le_bytes ( buf) as u32
496493 }
497494 FatType :: Fat12 => {
498495 let base = n as u64 + ( n as u64 / 2 ) ;
499- disk. seek ( SeekFrom :: Start ( fat_start + base) ) ;
500- let buf = unsafe { disk. read_exact ( 2 ) } ;
496+ let buf = unsafe { disk. read_exact_at ( 2 , fat_start + base) } ;
501497 let buf: [ u8 ; 2 ] = buf. try_into ( ) . unwrap ( ) ;
502498 let entry16 = u16:: from_le_bytes ( buf) ;
503499 if n & 1 == 0 {
0 commit comments