diff options
author | Karel Zak | 2017-07-19 10:34:03 +0200 |
---|---|---|
committer | Karel Zak | 2017-07-19 10:34:03 +0200 |
commit | e5e704630f470380000b9a1f51cbca7a1606cb67 (patch) | |
tree | 72aa908833746594e0e57bf89af419bc3c65509d /libfdisk | |
parent | blkid: Add dm-integrity superblock signature (diff) | |
download | kernel-qcow2-util-linux-e5e704630f470380000b9a1f51cbca7a1606cb67.tar.gz kernel-qcow2-util-linux-e5e704630f470380000b9a1f51cbca7a1606cb67.tar.xz kernel-qcow2-util-linux-e5e704630f470380000b9a1f51cbca7a1606cb67.zip |
libfdisk: (dos) return EINVAL when delete unused partition
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'libfdisk')
-rw-r--r-- | libfdisk/src/dos.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/libfdisk/src/dos.c b/libfdisk/src/dos.c index 44d022155..12d014449 100644 --- a/libfdisk/src/dos.c +++ b/libfdisk/src/dos.c @@ -401,7 +401,7 @@ static void reset_pte(struct pte *pe) memset(pe, 0, sizeof(struct pte)); } -static int dos_delete_partition(struct fdisk_context *cxt, size_t partnum) +static int delete_partition(struct fdisk_context *cxt, size_t partnum) { struct fdisk_dos_label *l; struct pte *pe; @@ -499,6 +499,21 @@ static int dos_delete_partition(struct fdisk_context *cxt, size_t partnum) return 0; } +static int dos_delete_partition(struct fdisk_context *cxt, size_t partnum) +{ + struct pte *pe; + + assert(cxt); + assert(cxt->label); + assert(fdisk_is_label(cxt, DOS)); + + pe = self_pte(cxt, partnum); + if (!pe || !is_used_partition(pe->pt_entry)) + return -EINVAL; + + return delete_partition(cxt, partnum); +} + static void read_extended(struct fdisk_context *cxt, size_t ext) { size_t i; @@ -628,7 +643,7 @@ static void read_extended(struct fdisk_context *cxt, size_t ext) if (p && !dos_partition_get_size(p) && (cxt->label->nparts_max > 5 || (q && q->sys_ind))) { fdisk_info(cxt, _("omitting empty partition (%zu)"), i+1); - dos_delete_partition(cxt, i); + delete_partition(cxt, i); goto remove; /* numbering changed */ } } |