Skip to content

Commit 8e79f69

Browse files
committed
Move functions into impl blocks.
1 parent 84286ee commit 8e79f69

File tree

1 file changed

+38
-43
lines changed

1 file changed

+38
-43
lines changed

src/fs.rs

Lines changed: 38 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,7 @@ impl<IO: Read + Write + Seek, TP, OCC> FileSystem<IO, TP, OCC> {
410410
if options.ignore_dirty_flag {
411411
warn!("BPB is dirty, clearing dirty flag.");
412412
bpb_status_flags.dirty = false;
413-
write_bpb_status_flags(&mut disk, fat_type, bpb_status_flags)?;
413+
Self::write_bpb_status_flags(&mut disk, fat_type, bpb_status_flags)?;
414414
bpb.set_status_flags(bpb_status_flags);
415415
} else {
416416
return Err(Error::DirtyFileSystem);
@@ -590,9 +590,7 @@ impl<IO: Read + Write + Seek, TP, OCC> FileSystem<IO, TP, OCC> {
590590
Ok(free_cluster_count)
591591
}
592592

593-
/// Unmounts the filesystem.
594-
///
595-
/// Updates the FS Information Sector if needed.
593+
/// Updates the FS Information Sector if needed and unmounts the filesystem.
596594
///
597595
/// # Errors
598596
///
@@ -601,6 +599,11 @@ impl<IO: Read + Write + Seek, TP, OCC> FileSystem<IO, TP, OCC> {
601599
self.flush()
602600
}
603601

602+
/// Updates the FS information sector if needed.
603+
///
604+
/// # Errors
605+
///
606+
/// `Error::Io` will be returned if the underlying storage object returned an I/O error.
604607
pub fn flush(&mut self) -> Result<(), Error<IO::Error>> {
605608
self.flush_fs_info()?;
606609
self.set_dirty_flag(false)?;
@@ -619,10 +622,40 @@ impl<IO: Read + Write + Seek, TP, OCC> FileSystem<IO, TP, OCC> {
619622
Ok(())
620623
}
621624

625+
fn write_bpb_status_flags(
626+
disk: &mut IO,
627+
fat_type: FatType,
628+
status_flags: FsStatusFlags,
629+
) -> Result<(), Error<IO::Error>> {
630+
let encoded = status_flags.encode();
631+
632+
// Note: only one field is written to avoid rewriting entire boot-sector which could be dangerous
633+
// Compute reserver_1 field offset and write new flags
634+
let offset = if fat_type == FatType::Fat32 { 0x041 } else { 0x025 };
635+
636+
disk.seek(io::SeekFrom::Start(offset))?;
637+
disk.write_u8(encoded)?;
638+
639+
Ok(())
640+
}
641+
622642
#[inline]
623643
pub(crate) fn set_dirty_flag(&self, dirty: bool) -> Result<(), Error<IO::Error>> {
624644
let mut disk = self.disk.borrow_mut();
625-
set_dirty_flag(&mut *disk, self.fat_type(), &self.current_status_flags, dirty)
645+
646+
let mut status_flags = self.current_status_flags.get();
647+
648+
if status_flags.dirty == dirty {
649+
// Dirty flag did not change.
650+
return Ok(());
651+
}
652+
653+
status_flags.dirty = dirty;
654+
655+
Self::write_bpb_status_flags(&mut *disk, self.fat_type(), status_flags)?;
656+
self.current_status_flags.set(status_flags);
657+
658+
Ok(())
626659
}
627660

628661
/// Returns a root directory object allowing for futher penetration of a filesystem structure.
@@ -752,44 +785,6 @@ impl<IO: ReadWriteSeek, TP, OCC> Clone for FsIoAdapter<'_, IO, TP, OCC> {
752785
}
753786
}
754787

755-
fn set_dirty_flag<IO: Seek + Write>(
756-
disk: &mut IO,
757-
fat_type: FatType,
758-
current_status_flags: &Cell<FsStatusFlags>,
759-
dirty: bool,
760-
) -> Result<(), Error<IO::Error>> {
761-
let mut status_flags = current_status_flags.get();
762-
763-
if status_flags.dirty == dirty {
764-
// Dirty flag did not change.
765-
return Ok(());
766-
}
767-
768-
status_flags.dirty = dirty;
769-
770-
write_bpb_status_flags(disk, fat_type, status_flags)?;
771-
current_status_flags.set(status_flags);
772-
773-
Ok(())
774-
}
775-
776-
fn write_bpb_status_flags<IO: Seek + Write>(
777-
disk: &mut IO,
778-
fat_type: FatType,
779-
status_flags: FsStatusFlags,
780-
) -> Result<(), Error<IO::Error>> {
781-
let encoded = status_flags.encode();
782-
783-
// Note: only one field is written to avoid rewriting entire boot-sector which could be dangerous
784-
// Compute reserver_1 field offset and write new flags
785-
let offset = if fat_type == FatType::Fat32 { 0x041 } else { 0x025 };
786-
787-
disk.seek(io::SeekFrom::Start(offset))?;
788-
disk.write_u8(encoded)?;
789-
790-
Ok(())
791-
}
792-
793788
fn fat_slice<B: BorrowMut<S>, E, S: ReadWriteSeek>(io: B, bpb: &BiosParameterBlock) -> DiskSlice<B, E, S> {
794789
let sectors_per_fat = bpb.sectors_per_fat();
795790
let mirroring_enabled = bpb.mirroring_enabled();

0 commit comments

Comments
 (0)