summaryrefslogtreecommitdiffstats
path: root/libfdisk/src/dos.c
diff options
context:
space:
mode:
authorKarel Zak2017-07-19 11:30:57 +0200
committerKarel Zak2017-07-19 11:30:57 +0200
commit992f7cbae420ab1b71fd9f2c2ae10c9804c1d213 (patch)
tree0ddb41ced462bf3fc0feebc1b5a14df76b4966aa /libfdisk/src/dos.c
parentlibfdisk: (dos) return EINVAL when delete unused partition (diff)
downloadkernel-qcow2-util-linux-992f7cbae420ab1b71fd9f2c2ae10c9804c1d213.tar.gz
kernel-qcow2-util-linux-992f7cbae420ab1b71fd9f2c2ae10c9804c1d213.tar.xz
kernel-qcow2-util-linux-992f7cbae420ab1b71fd9f2c2ae10c9804c1d213.zip
libfdisk: add fdisk_disable_dialogs()
The default (for historical reasons) is to use dialog driven partitioning. It's possible to avoid dialogs by fdisk_partition template for fdisk_add_partition(). Unfortunately in some case (mostly DOS driver) it's not enough, because we need to distinguish between logical and primary partitions. If we know that dialogs are unwanted then we can default to primary partition, etc. This function simplify semantic of the library for non-interactive programs. Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'libfdisk/src/dos.c')
-rw-r--r--libfdisk/src/dos.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/libfdisk/src/dos.c b/libfdisk/src/dos.c
index 12d014449..6fa9108ed 100644
--- a/libfdisk/src/dos.c
+++ b/libfdisk/src/dos.c
@@ -1597,7 +1597,7 @@ static int dos_add_partition(struct fdisk_context *cxt,
DBG(LABEL, ul_debug("DOS: pa template specifies partno>=4 for primary partition"));
return -EINVAL;
}
- if (pa->type && IS_EXTENDED(pa->type->code)) {
+ if (ext_pe && pa->type && IS_EXTENDED(pa->type->code)) {
fdisk_warnx(cxt, _("Extended partition already exists."));
return -EINVAL;
}
@@ -1674,6 +1674,8 @@ static int dos_add_partition(struct fdisk_context *cxt,
DBG(LABEL, ul_debug("DOS: primary impossible, add logical"));
if (l->ext_offset) {
if (!pa || fdisk_partition_has_start(pa)) {
+ /* See above case A); here we have start, but
+ * out of extended partition */
const char *msg;
if (!free_primary)
msg = _("All primary partitions are in use.");
@@ -1708,7 +1710,7 @@ static int dos_add_partition(struct fdisk_context *cxt,
int c;
/* the default layout for scripts is to create primary partitions */
- if (cxt->script) {
+ if (cxt->script || !fdisk_has_dialogs(cxt)) {
rc = get_partition_unused_primary(cxt, pa, &res);
if (rc == 0)
rc = add_partition(cxt, res, pa);