summaryrefslogtreecommitdiffstats
path: root/libfdisk/src
diff options
context:
space:
mode:
authorKarel Zak2017-02-17 16:11:37 +0100
committerKarel Zak2017-02-17 16:11:37 +0100
commit8d03f4af49a7efe894cb7c68c84649fb889ba741 (patch)
tree539495c8274ab804aad23f6f96fac8370a87fdab /libfdisk/src
parentlibfdisk: (gpt) make sure it's GPT in public API (diff)
downloadkernel-qcow2-util-linux-8d03f4af49a7efe894cb7c68c84649fb889ba741.tar.gz
kernel-qcow2-util-linux-8d03f4af49a7efe894cb7c68c84649fb889ba741.tar.xz
kernel-qcow2-util-linux-8d03f4af49a7efe894cb7c68c84649fb889ba741.zip
libfdisk: (dos) make it possible to create primary/logical by template
Let's check partition partno if specified to create logical or primary partition. Addresses: https://github.com/karelzak/util-linux/issues/204 Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'libfdisk/src')
-rw-r--r--libfdisk/src/dos.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/libfdisk/src/dos.c b/libfdisk/src/dos.c
index 0c2006ed6..69090706a 100644
--- a/libfdisk/src/dos.c
+++ b/libfdisk/src/dos.c
@@ -1551,10 +1551,28 @@ static int dos_add_partition(struct fdisk_context *cxt,
} else if (pa && fdisk_partition_has_start(pa)) {
DBG(LABEL, ul_debug("DOS: pa template %p: add primary", pa));
rc = get_partition_unused_primary(cxt, pa, &res);
- if (rc == 0) {
+ if (rc == 0)
rc = add_partition(cxt, res, pa);
- goto done;
- }
+ goto done;
+
+ /* pa follows default, but partno < 4, it means primary partition */
+ } else if (pa && fdisk_partition_start_is_default(pa)
+ && fdisk_partition_has_partno(pa)
+ && pa->partno < 4) {
+ DBG(LABEL, ul_debug("DOS: pa template %p: add primary (partno < 4)", pa));
+ rc = get_partition_unused_primary(cxt, pa, &res);
+ if (rc == 0)
+ rc = add_partition(cxt, res, pa);
+ goto done;
+
+ /* pa follows default, but partno >= 4, it means logical partition */
+ } else if (pa && fdisk_partition_start_is_default(pa)
+ && ext_pe
+ && fdisk_partition_has_partno(pa)
+ && pa->partno >= 4) {
+ DBG(LABEL, ul_debug("DOS: pa template %p: add logical (partno >= 4)", pa));
+ rc = add_logical(cxt, pa, &res);
+ goto done;
}
/*