@@ -3,7 +3,7 @@ use core::convert::TryFrom;
33use crate :: dir_entry:: DirEntryEditor ;
44use crate :: error:: Error ;
55use crate :: fs:: { FileSystem , ReadWriteSeek } ;
6- use crate :: io:: { IoBase , Read , Seek , SeekFrom , Write } ;
6+ use crate :: io:: { IoBase , ReadFile , Seek , SeekFrom , Write , WriteFile } ;
77use crate :: time:: { Date , DateTime , TimeProvider } ;
88
99const MAX_FILE_SIZE : u32 = core:: u32:: MAX ;
@@ -254,7 +254,7 @@ impl<IO: ReadWriteSeek, TP, OCC> IoBase for File<'_, IO, TP, OCC> {
254254 type Error = Error < IO :: Error > ;
255255}
256256
257- impl < IO : ReadWriteSeek , TP : TimeProvider , OCC > Read for File < ' _ , IO , TP , OCC > {
257+ impl < IO : ReadWriteSeek , TP : TimeProvider , OCC > ReadFile for File < ' _ , IO , TP , OCC > {
258258 fn read ( & mut self , buf : & mut [ u8 ] ) -> Result < usize , Self :: Error > {
259259 trace ! ( "File::read" ) ;
260260 let cluster_size = self . fs . cluster_size ( ) ;
@@ -286,15 +286,10 @@ impl<IO: ReadWriteSeek, TP: TimeProvider, OCC> Read for File<'_, IO, TP, OCC> {
286286 }
287287 trace ! ( "read {} bytes in cluster {}" , read_size, current_cluster) ;
288288 let offset_in_fs = self . fs . offset_from_cluster ( current_cluster) + u64:: from ( offset_in_cluster) ;
289- let read_bytes = {
290- let mut disk = self . fs . disk . borrow_mut ( ) ;
291- disk. seek ( SeekFrom :: Start ( offset_in_fs) ) ?;
292- disk. read ( & mut buf[ ..read_size] ) ?
293- } ;
294- if read_bytes == 0 {
295- return Ok ( 0 ) ;
296- }
297- self . offset += read_bytes as u32 ;
289+ let mut disk = self . fs . disk . borrow_mut ( ) ;
290+ disk. seek ( SeekFrom :: Start ( offset_in_fs) ) ?;
291+ disk. read_exact ( & mut buf[ ..read_size] ) ?;
292+ self . offset += read_size as u32 ;
298293 self . current_cluster = Some ( current_cluster) ;
299294
300295 if let Some ( ref mut e) = self . entry {
@@ -303,7 +298,7 @@ impl<IO: ReadWriteSeek, TP: TimeProvider, OCC> Read for File<'_, IO, TP, OCC> {
303298 e. set_accessed ( now) ;
304299 }
305300 }
306- Ok ( read_bytes )
301+ Ok ( read_size )
307302 }
308303}
309304
@@ -313,11 +308,11 @@ where
313308 std:: io:: Error : From < Error < IO :: Error > > ,
314309{
315310 fn read ( & mut self , buf : & mut [ u8 ] ) -> std:: io:: Result < usize > {
316- Ok ( Read :: read ( self , buf) ?)
311+ Ok ( ReadFile :: read ( self , buf) ?)
317312 }
318313}
319314
320- impl < IO : ReadWriteSeek , TP : TimeProvider , OCC > Write for File < ' _ , IO , TP , OCC > {
315+ impl < IO : ReadWriteSeek , TP : TimeProvider , OCC > WriteFile for File < ' _ , IO , TP , OCC > {
321316 fn write ( & mut self , buf : & [ u8 ] ) -> Result < usize , Self :: Error > {
322317 trace ! ( "File::write" ) ;
323318 let cluster_size = self . fs . cluster_size ( ) ;
@@ -365,19 +360,14 @@ impl<IO: ReadWriteSeek, TP: TimeProvider, OCC> Write for File<'_, IO, TP, OCC> {
365360 } ;
366361 trace ! ( "write {} bytes in cluster {}" , write_size, current_cluster) ;
367362 let offset_in_fs = self . fs . offset_from_cluster ( current_cluster) + u64:: from ( offset_in_cluster) ;
368- let written_bytes = {
369- let mut disk = self . fs . disk . borrow_mut ( ) ;
370- disk. seek ( SeekFrom :: Start ( offset_in_fs) ) ?;
371- disk. write ( & buf[ ..write_size] ) ?
372- } ;
373- if written_bytes == 0 {
374- return Ok ( 0 ) ;
375- }
363+ let mut disk = self . fs . disk . borrow_mut ( ) ;
364+ disk. seek ( SeekFrom :: Start ( offset_in_fs) ) ?;
365+ disk. write_all ( & buf[ ..write_size] ) ?;
376366 // some bytes were writter - update position and optionally size
377- self . offset += written_bytes as u32 ;
367+ self . offset += write_size as u32 ;
378368 self . current_cluster = Some ( current_cluster) ;
379369 self . update_dir_entry_after_write ( ) ;
380- Ok ( written_bytes )
370+ Ok ( write_size )
381371 }
382372
383373 fn flush ( & mut self ) -> Result < ( ) , Self :: Error > {
@@ -391,7 +381,8 @@ where
391381 std:: io:: Error : From < Error < IO :: Error > > ,
392382{
393383 fn write ( & mut self , buf : & [ u8 ] ) -> std:: io:: Result < usize > {
394- Ok ( Write :: write ( self , buf) ?)
384+ Write :: write_all ( self , buf) ?;
385+ Ok ( buf. len ( ) )
395386 }
396387
397388 fn write_all ( & mut self , buf : & [ u8 ] ) -> std:: io:: Result < ( ) > {
0 commit comments