@@ -237,7 +237,7 @@ impl<D: Read + Seek> FileSystem<D> {
237
237
pub fn file_clusters < ' a > (
238
238
& ' a mut self ,
239
239
file : & File ,
240
- ) -> impl Iterator < Item = Result < u32 , ( ) > > + ' a {
240
+ ) -> impl Iterator < Item = Result < Cluster , ( ) > > + ' a {
241
241
Traverser {
242
242
current_entry : file. first_cluster ,
243
243
bpb : & self . bpb ,
@@ -246,6 +246,12 @@ impl<D: Read + Seek> FileSystem<D> {
246
246
}
247
247
}
248
248
249
+ #[ derive( Debug ) ]
250
+ pub struct Cluster {
251
+ pub start_offset : u64 ,
252
+ pub len_bytes : u32 ,
253
+ }
254
+
249
255
struct Traverser < ' a , D > {
250
256
disk : & ' a mut D ,
251
257
current_entry : u32 ,
@@ -256,7 +262,7 @@ impl<D> Traverser<'_, D>
256
262
where
257
263
D : Read + Seek ,
258
264
{
259
- fn next_cluster ( & mut self ) -> Result < Option < u32 > , ( ) > {
265
+ fn next_cluster ( & mut self ) -> Result < Option < Cluster > , ( ) > {
260
266
let entry = classify_fat_entry (
261
267
self . bpb . fat_type ( ) ,
262
268
self . current_entry ,
@@ -269,28 +275,22 @@ where
269
275
} ;
270
276
let cluster_start =
271
277
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
- // }
281
278
let next_entry =
282
279
fat_entry_of_nth_cluster ( self . disk , self . bpb . fat_type ( ) , self . bpb . fat_offset ( ) , entry) ;
283
280
self . current_entry = next_entry;
284
281
285
- Ok ( Some ( entry) )
282
+ Ok ( Some ( Cluster {
283
+ start_offset : cluster_start,
284
+ len_bytes : self . bpb . bytes_per_cluster ( ) ,
285
+ } ) )
286
286
}
287
287
}
288
288
289
289
impl < D > Iterator for Traverser < ' _ , D >
290
290
where
291
291
D : Read + Seek ,
292
292
{
293
- type Item = Result < u32 , ( ) > ;
293
+ type Item = Result < Cluster , ( ) > ;
294
294
295
295
fn next ( & mut self ) -> Option < Self :: Item > {
296
296
self . next_cluster ( ) . transpose ( )
0 commit comments