@@ -61,24 +61,18 @@ impl From<neotron_loader::Error<embedded_sdmmc::Error<bios::Error>>> for Error {
6161/// Something the ELF loader can use to get bytes off the disk
6262struct FileSource {
6363 mgr : core:: cell:: RefCell < embedded_sdmmc:: VolumeManager < BiosBlock , BiosTime > > ,
64- volume : embedded_sdmmc:: Volume ,
65- file : core:: cell:: RefCell < File > ,
64+ file : embedded_sdmmc:: File ,
6665 buffer : core:: cell:: RefCell < [ u8 ; Self :: BUFFER_LEN ] > ,
6766 offset_cached : core:: cell:: Cell < Option < u32 > > ,
6867}
6968
7069impl FileSource {
7170 const BUFFER_LEN : usize = 128 ;
7271
73- fn new (
74- mgr : embedded_sdmmc:: VolumeManager < BiosBlock , BiosTime > ,
75- volume : embedded_sdmmc:: Volume ,
76- file : File ,
77- ) -> FileSource {
72+ fn new ( mgr : embedded_sdmmc:: VolumeManager < BiosBlock , BiosTime > , file : File ) -> FileSource {
7873 FileSource {
7974 mgr : core:: cell:: RefCell :: new ( mgr) ,
80- file : core:: cell:: RefCell :: new ( file) ,
81- volume,
75+ file,
8276 buffer : core:: cell:: RefCell :: new ( [ 0u8 ; 128 ] ) ,
8377 offset_cached : core:: cell:: Cell :: new ( None ) ,
8478 }
@@ -90,10 +84,11 @@ impl FileSource {
9084 out_buffer : & mut [ u8 ] ,
9185 ) -> Result < ( ) , embedded_sdmmc:: Error < bios:: Error > > {
9286 osprintln ! ( "Reading from {}" , offset) ;
93- self . file . borrow_mut ( ) . seek_from_start ( offset) . unwrap ( ) ;
9487 self . mgr
9588 . borrow_mut ( )
96- . read ( & self . volume , & mut self . file . borrow_mut ( ) , out_buffer) ?;
89+ . file_seek_from_start ( self . file , offset)
90+ . unwrap ( ) ;
91+ self . mgr . borrow_mut ( ) . read ( self . file , out_buffer) ?;
9792 Ok ( ( ) )
9893 }
9994}
@@ -117,12 +112,13 @@ impl neotron_loader::traits::Source for &FileSource {
117112 }
118113
119114 osprintln ! ( "Reading from {}" , offset) ;
120- self . file . borrow_mut ( ) . seek_from_start ( offset) . unwrap ( ) ;
121- self . mgr . borrow_mut ( ) . read (
122- & self . volume ,
123- & mut self . file . borrow_mut ( ) ,
124- self . buffer . borrow_mut ( ) . as_mut_slice ( ) ,
125- ) ?;
115+ self . mgr
116+ . borrow_mut ( )
117+ . file_seek_from_start ( self . file , offset)
118+ . unwrap ( ) ;
119+ self . mgr
120+ . borrow_mut ( )
121+ . read ( self . file , self . buffer . borrow_mut ( ) . as_mut_slice ( ) ) ?;
126122 self . offset_cached . set ( Some ( offset) ) ;
127123 chunk. copy_from_slice ( & self . buffer . borrow ( ) [ 0 ..chunk. len ( ) ] ) ;
128124
@@ -209,16 +205,11 @@ impl TransientProgramArea {
209205 let time = crate :: fs:: BiosTime ( ) ;
210206 let mut mgr = embedded_sdmmc:: VolumeManager :: new ( bios_block, time) ;
211207 // Open the first partition
212- let mut volume = mgr. get_volume ( embedded_sdmmc:: VolumeIdx ( 0 ) ) ?;
213- let root_dir = mgr. open_root_dir ( & volume) ?;
214- let file = mgr. open_file_in_dir (
215- & mut volume,
216- & root_dir,
217- file_name,
218- embedded_sdmmc:: Mode :: ReadOnly ,
219- ) ?;
220-
221- let source = FileSource :: new ( mgr, volume, file) ;
208+ let volume = mgr. open_volume ( embedded_sdmmc:: VolumeIdx ( 0 ) ) ?;
209+ let root_dir = mgr. open_root_dir ( volume) ?;
210+ let file = mgr. open_file_in_dir ( root_dir, file_name, embedded_sdmmc:: Mode :: ReadOnly ) ?;
211+
212+ let source = FileSource :: new ( mgr, file) ;
222213 let loader = neotron_loader:: Loader :: new ( & source) ?;
223214
224215 let mut iter = loader. iter_program_headers ( ) ;
0 commit comments