summaryrefslogtreecommitdiffstats
path: root/disk-utils
diff options
context:
space:
mode:
authorKarel Zak2015-04-16 17:40:28 +0200
committerKarel Zak2015-04-16 17:51:18 +0200
commit2928068a3ced58023c4e80f2b96b8b636d10b720 (patch)
tree5bcc588ead87a7e9cb115e760da52957913617b5 /disk-utils
parenttests: fix logger device pathname too long (diff)
downloadkernel-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.c22
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 */