ax-runtime 0.6.0

Runtime library of ArceOS
use alloc::vec::Vec;

use super::{
    BlockReader, BlockRegion, BlockVolume, DiskId, Error, PartitionId, PartitionTableKind, Result,
    gpt, mbr,
};

pub fn scan_volumes<R: BlockReader>(reader: &mut R, disk_id: DiskId) -> Result<Vec<BlockVolume>> {
    if reader.block_size() == 0 || reader.num_blocks() == 0 {
        return Err(Error::InvalidBlockSize);
    }

    if let Some(volumes) = gpt::scan_gpt(reader, disk_id)? {
        return Ok(volumes);
    }

    if let Some(volumes) = mbr::scan_mbr(reader, disk_id)? {
        return Ok(volumes);
    }

    Ok(Vec::from([BlockVolume {
        disk_id,
        partition_id: PartitionId(0),
        region: BlockRegion::new(0, reader.num_blocks()),
        table_kind: PartitionTableKind::Raw,
        bootable: false,
        partuuid: None,
        partlabel: None,
    }]))
}