Skip to content

Commit a958a2b

Browse files
committed
Return cluster start address and size
1 parent 06d3b95 commit a958a2b

File tree

1 file changed

+13
-13
lines changed

1 file changed

+13
-13
lines changed

bios/second_stage/src/fat.rs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
249255
struct Traverser<'a, D> {
250256
disk: &'a mut D,
251257
current_entry: u32,
@@ -256,7 +262,7 @@ impl<D> Traverser<'_, D>
256262
where
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

289289
impl<D> Iterator for Traverser<'_, D>
290290
where
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

Comments
 (0)