Skip to content
Snippets Groups Projects
Forked from KED Software Projects / Miscellaneous / KED U-Boot Fork
Source project has a limited visibility.
  • Stephen Warren's avatar
    d1efb644
    disk: part_dos: don't claim whole-disk FAT filesystems · d1efb644
    Stephen Warren authored
    
    Logically, a disk that contains a raw FAT filesystem does not in fact
    have a partition table. However, test_part_dos() was claiming that such
    disks did in fact have a DOS-style partition table. This caused
    get_device_and_partition() not to return a whole-disk disk_partition_t,
    since part_type != PART_TYPE_UNKNOWN.
    
    part_dos.c's print_partition_extended() detected the raw FAT filesystem
    condition and printed a fake partition table that encompassed the whole
    disk.
    
    However, part_dos.c's get_partition_info_extended() did not return any
    valid partitions in this case. This combination caused
    get_device_and_partition() not to find any valid partitions, and hence
    to return an error.
    
    Fix test_part_dos() not to claim that raw FAT filesystems are DOS
    partition tables. In turn, this causes get_device_and_partition() to
    return a whole-disk disk_partition_t, and hence the following commands
    work:
    
    fatls mmc 0 /
    fatls mmc 0:auto /
    
    An alternative would be to modify print_partition_extended() to detect
    raw FAT filesystems, just like print_partition_extended() does, and to
    return a fake partition in this case. However, this seems logically
    incorrect, and also duplicates code, since get_device_and_partition()
    falls back to returning a whole-disk partition when there is no partition
    table on the device.
    
    Signed-off-by: default avatarStephen Warren <swarren@nvidia.com>
    d1efb644
    History
    disk: part_dos: don't claim whole-disk FAT filesystems
    Stephen Warren authored
    
    Logically, a disk that contains a raw FAT filesystem does not in fact
    have a partition table. However, test_part_dos() was claiming that such
    disks did in fact have a DOS-style partition table. This caused
    get_device_and_partition() not to return a whole-disk disk_partition_t,
    since part_type != PART_TYPE_UNKNOWN.
    
    part_dos.c's print_partition_extended() detected the raw FAT filesystem
    condition and printed a fake partition table that encompassed the whole
    disk.
    
    However, part_dos.c's get_partition_info_extended() did not return any
    valid partitions in this case. This combination caused
    get_device_and_partition() not to find any valid partitions, and hence
    to return an error.
    
    Fix test_part_dos() not to claim that raw FAT filesystems are DOS
    partition tables. In turn, this causes get_device_and_partition() to
    return a whole-disk disk_partition_t, and hence the following commands
    work:
    
    fatls mmc 0 /
    fatls mmc 0:auto /
    
    An alternative would be to modify print_partition_extended() to detect
    raw FAT filesystems, just like print_partition_extended() does, and to
    return a fake partition in this case. However, this seems logically
    incorrect, and also duplicates code, since get_device_and_partition()
    falls back to returning a whole-disk partition when there is no partition
    table on the device.
    
    Signed-off-by: default avatarStephen Warren <swarren@nvidia.com>