Skip to content

Commit

Permalink
superblock: Fix rewind ordering to try all filesystem variants
Browse files Browse the repository at this point in the history
Signed-off-by: Ikey Doherty <ikey@serpentos.com>
  • Loading branch information
ikeycode committed May 18, 2024
1 parent 711a466 commit 8e85bc7
Showing 1 changed file with 18 additions and 10 deletions.
28 changes: 18 additions & 10 deletions blsforme/src/superblock/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -65,18 +65,26 @@ pub enum Error {

/// Attempt to find a superblock decoder for the given reader
pub fn for_reader<R: Read + Seek>(reader: &mut R) -> Result<Superblock, Error> {
reader.seek(io::SeekFrom::Start(0))?;
reader.rewind()?;

// try ext4
if let Ok(block) = ext4::Superblock::from_reader(reader) {
Ok(Superblock::Ext4(Box::new(block)))
} else if let Ok(block) = btrfs::Superblock::from_reader(reader) {
reader.seek(io::SeekFrom::Start(0))?;
Ok(Superblock::BTRFS(Box::new(block)))
} else if let Ok(block) = f2fs::Superblock::from_reader(reader) {
reader.seek(io::SeekFrom::Start(0))?;
Ok(Superblock::F2FS(Box::new(block)))
} else {
Err(Error::UnknownSuperblock)
return Ok(Superblock::Ext4(Box::new(block)));
}

// try btrfs now
reader.rewind()?;
if let Ok(block) = btrfs::Superblock::from_reader(reader) {
return Ok(Superblock::BTRFS(Box::new(block)));
}

// try f2fs
reader.rewind()?;
if let Ok(block) = f2fs::Superblock::from_reader(reader) {
return Ok(Superblock::F2FS(Box::new(block)));
}

Err(Error::UnknownSuperblock)
}

#[cfg(test)]
Expand Down

0 comments on commit 8e85bc7

Please sign in to comment.