Skip to content

Unable to recover from CorruptedFileSystem unless storage is Clone  #54

Open
@MathiasKoch

Description

@MathiasKoch

The current implementation makes it impossible to recover from a CorruptedFileSystem error by formatting filesystem, unless the storage argument of Filesystem::new() implements Clone or similar.

let fs = match FileSystem::new(storage, FsOptions::new()) {
    Ok(fs) => fs,
    Err(fatfs::Error::CorruptedFileSystem) => {
        // `storage` moved, so it is impossible to call `fatfs::format_volume` here.
        todo!()
    }
    Err(_) => todo!(),
};

It is also impossible to fix it by implementing Read, Write & friends for &mut storage due to the current IntoStorage that will consume by self...

Another related issue is that storage is not returned in unmount, resulting in it being lost forever in e.g. an embedded system where storage directly correlates to a peripheral.

I have played around with one possible solution, that would be able to fix all of the above issues, but i am not sure if it is a direction you want to go? MathiasKoch@6ed236a

If so, i would love to finish it up and make a PR.

Currently it is missing the return of storage on unmounts, an Into implementation for StdIoWrapper and fixing the examples & tests.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions