@@ -237,7 +237,7 @@ impl<D: Read + Seek> FileSystem<D> {
237237 pub fn file_clusters < ' a > (
238238 & ' a mut self ,
239239 file : & File ,
240- ) -> impl Iterator < Item = Result < u32 , ( ) > > + ' a {
240+ ) -> impl Iterator < Item = Result < Cluster , ( ) > > + ' a {
241241 Traverser {
242242 current_entry : file. first_cluster ,
243243 bpb : & self . bpb ,
@@ -246,6 +246,12 @@ impl<D: Read + Seek> FileSystem<D> {
246246 }
247247}
248248
249+ #[ derive( Debug ) ]
250+ pub struct Cluster {
251+ pub start_offset : u64 ,
252+ pub len_bytes : u32 ,
253+ }
254+
249255struct Traverser < ' a , D > {
250256 disk : & ' a mut D ,
251257 current_entry : u32 ,
@@ -256,7 +262,7 @@ impl<D> Traverser<'_, D>
256262where
257263 D : Read + Seek ,
258264{
259- fn next_cluster ( & mut self ) -> Result < Option < u32 > , ( ) > {
265+ fn next_cluster ( & mut self ) -> Result < Option < Cluster > , ( ) > {
260266 let entry = classify_fat_entry (
261267 self . bpb . fat_type ( ) ,
262268 self . current_entry ,
@@ -269,28 +275,22 @@ where
269275 } ;
270276 let cluster_start =
271277 self . bpb . data_offset ( ) + ( u64:: from ( entry) - 2 ) * self . bpb . bytes_per_cluster ( ) as u64 ;
272- // handle_read(
273- // self.traverser.handle,
274- // cluster_start,
275- // self.traverser.bpb.bytes_per_cluster() as usize,
276- // &mut self.traverser.buf,
277- // )?;
278- // if let Some(t) = f(&self.traverser.buf) {
279- // break Ok(Some(t));
280- // }
281278 let next_entry =
282279 fat_entry_of_nth_cluster ( self . disk , self . bpb . fat_type ( ) , self . bpb . fat_offset ( ) , entry) ;
283280 self . current_entry = next_entry;
284281
285- Ok ( Some ( entry) )
282+ Ok ( Some ( Cluster {
283+ start_offset : cluster_start,
284+ len_bytes : self . bpb . bytes_per_cluster ( ) ,
285+ } ) )
286286 }
287287}
288288
289289impl < D > Iterator for Traverser < ' _ , D >
290290where
291291 D : Read + Seek ,
292292{
293- type Item = Result < u32 , ( ) > ;
293+ type Item = Result < Cluster , ( ) > ;
294294
295295 fn next ( & mut self ) -> Option < Self :: Item > {
296296 self . next_cluster ( ) . transpose ( )
0 commit comments