diff options
author | Karel Zak | 2015-04-16 17:40:28 +0200 |
---|---|---|
committer | Karel Zak | 2015-04-16 17:51:18 +0200 |
commit | 2928068a3ced58023c4e80f2b96b8b636d10b720 (patch) | |
tree | 5bcc588ead87a7e9cb115e760da52957913617b5 /disk-utils | |
parent | tests: fix logger device pathname too long (diff) | |
download | kernel-qcow2-util-linux-2928068a3ced58023c4e80f2b96b8b636d10b720.tar.gz kernel-qcow2-util-linux-2928068a3ced58023c4e80f2b96b8b636d10b720.tar.xz kernel-qcow2-util-linux-2928068a3ced58023c4e80f2b96b8b636d10b720.zip |
sfdisk: accept empty partitions from dump
Old sfdisk uses:
dev/sdc2 : start= 0, size= 0, Id= 0
for undefined MBR partitions. Let's follow this behaviour.
Reported-by: Ruediger Meier <sweet_f_a@gmx.de>
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'disk-utils')
-rw-r--r-- | disk-utils/sfdisk.c | 22 |
1 files changed, 19 insertions, 3 deletions
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 <device> [[-N] <partno>] * @@ -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 */ |