diff options
author | Karel Zak | 2017-02-17 16:11:37 +0100 |
---|---|---|
committer | Karel Zak | 2017-02-17 16:11:37 +0100 |
commit | 8d03f4af49a7efe894cb7c68c84649fb889ba741 (patch) | |
tree | 539495c8274ab804aad23f6f96fac8370a87fdab /libfdisk | |
parent | libfdisk: (gpt) make sure it's GPT in public API (diff) | |
download | kernel-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')
-rw-r--r-- | libfdisk/src/dos.c | 24 |
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; } /* |