b9-0.5.67: src/lib/B9/PartitionTable.hs
{-| Function to find the file offsets of primary partitions in raw disk
images. Currently only MBR partitions are supported. See 'B9.MBR' -}
module B9.PartitionTable
( getPartition
)
where
import Data.Word ( Word64 )
import qualified B9.MBR as MBR
getPartition :: Int -> FilePath -> IO (Word64, Word64, Word64)
getPartition partitionIndex diskImage =
blockSized <$> MBR.getPartition partitionIndex diskImage
blockSized :: (Integral a) => (a, a) -> (a, a, a)
blockSized (s, l) = let bs = gcd2 1 s l in (s `div` bs, l `div` bs, bs)
where
gcd2 n x y =
let next = 2 * n
in if x `rem` next == 0 && y `rem` next == 0 then gcd2 next x y else n