From: Karel Zak Date: Wed, 19 Jul 2017 08:34:03 +0000 (+0200) Subject: libfdisk: (dos) return EINVAL when delete unused partition X-Git-Tag: v2.31-rc1~184 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e5e704630f470380000b9a1f51cbca7a1606cb67;p=thirdparty%2Futil-linux.git libfdisk: (dos) return EINVAL when delete unused partition Signed-off-by: Karel Zak --- diff --git a/libfdisk/src/dos.c b/libfdisk/src/dos.c index 44d0221552..12d0144496 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 */ } }