diff --git a/src/installer/hw.c b/src/installer/hw.c index 3ec4d75e0..6d3389a6b 100644 --- a/src/installer/hw.c +++ b/src/installer/hw.c @@ -357,11 +357,26 @@ static unsigned long long hw_boot_size(struct hw_destination* dest) { return MB2BYTES(64); } +static int hw_device_has_p_suffix(const struct hw_destination* dest) { + // All RAID devices have the p suffix. + if (dest->is_raid) + return 1; + + // Devices with a number at the end have the p suffix, too. + // e.g. mmcblk0, cciss0 + unsigned int last_char = strlen(dest->path); + if ((dest->path[last_char] >= '0') && (dest->path[last_char] <= '9')) + return 1; + + return 0; +} + static int hw_calculate_partition_table(struct hw_destination* dest) { char path[DEV_SIZE]; int part_idx = 1; - snprintf(path, sizeof(path), "%s%s", dest->path, (dest->is_raid) ? "p" : ""); + snprintf(path, sizeof(path), "%s%s", dest->path, + hw_device_has_p_suffix(dest) ? "p" : ""); dest->part_boot_idx = 0; // Determine the size of the target block device