]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libfdisk: (dos) delete also logical with extended
authorKarel Zak <kzak@redhat.com>
Mon, 2 Feb 2015 09:38:05 +0000 (10:38 +0100)
committerKarel Zak <kzak@redhat.com>
Mon, 2 Feb 2015 09:38:05 +0000 (10:38 +0100)
deleting an extended partition with cfdisk leaves its contained
partitions in existence

Reported-by: Benno Schulenberg <bensberg@justemail.net>
Signed-off-by: Karel Zak <kzak@redhat.com>
libfdisk/src/dos.c

index 2cb11cb4a300e32dcf4189de74645b87081f5611..3a0a02bde1726f094003bdc6dd31ed39dbf7e1f5 100644 (file)
@@ -382,7 +382,7 @@ static void reset_pte(struct pte *pe)
        assert(pe);
 
        if (pe->private_sectorbuffer) {
-               DBG(LABEL, ul_debug("  --> freeing pte sector buffer %p",
+               DBG(LABEL, ul_debug("   --> freeing pte sector buffer %p",
                                        pe->sectorbuffer));
                free(pe->sectorbuffer);
        }
@@ -416,6 +416,13 @@ static int dos_delete_partition(struct fdisk_context *cxt, size_t partnum)
        if (partnum < 4) {
                DBG(LABEL, ul_debug("--> delete primary"));
                if (IS_EXTENDED(p->sys_ind) && partnum == l->ext_index) {
+                       size_t i;
+                       DBG(LABEL, ul_debug(" --> delete extended"));
+                       for (i = 4; i < cxt->label->nparts_max; i++) {
+                               DBG(LABEL, ul_debug("  --> delete logical #%zu", i));
+                               reset_pte(&l->ptes[i]);
+
+                       }
                        cxt->label->nparts_max = 4;
                        l->ptes[l->ext_index].ex_entry = NULL;
                        l->ext_offset = 0;