diff --git a/disk-utils/sfdisk.c b/disk-utils/sfdisk.c index 6645f5a39..f34a45adc 100644 --- a/disk-utils/sfdisk.c +++ b/disk-utils/sfdisk.c @@ -1120,6 +1120,22 @@ static char *sfdisk_fgets(struct fdisk_script *dp, } #endif +static int ignore_partition(struct fdisk_partition *pa) +{ + /* incomplete partition setting */ + if (!fdisk_partition_has_start(pa) && !fdisk_partition_start_is_default(pa)) + return 1; + if (!fdisk_partition_has_size(pa) && !fdisk_partition_end_is_default(pa)) + return 1; + + /* probably dump from old sfdisk with start=0 size=0 */ + if (fdisk_partition_has_start(pa) && fdisk_partition_get_start(pa) == 0 && + fdisk_partition_has_size(pa) && fdisk_partition_get_size(pa) == 0) + return 1; + + return 0; +} + /* * sfdisk [[-N] ] * @@ -1301,9 +1317,9 @@ static int command_fdisk(struct sfdisk *sf, int argc, char **argv) assert(pa); - if (!fdisk_partition_has_start(pa) && - !fdisk_partition_start_is_default(pa)) { - fdisk_info(sf->cxt, _("Ignoring partition %zu."), next_partno + 1); + if (ignore_partition(pa)) { + fdisk_info(sf->cxt, _("Ignoring partition.")); + next_partno++; continue; } if (!created) { /* create a new disklabel */