]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libfdisk: (dos) return EINVAL when delete unused partition
authorKarel Zak <kzak@redhat.com>
Wed, 19 Jul 2017 08:34:03 +0000 (10:34 +0200)
committerKarel Zak <kzak@redhat.com>
Wed, 19 Jul 2017 08:34:03 +0000 (10:34 +0200)
Signed-off-by: Karel Zak <kzak@redhat.com>
libfdisk/src/dos.c

index 44d02215521808a68d4588ab72f9f63ccb64ff85..12d014449682dbc8b8f0fbdfde595812d744a831 100644 (file)
@@ -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 */
                }
        }