diff options
author | Karel Zak | 2017-07-19 11:30:57 +0200 |
---|---|---|
committer | Karel Zak | 2017-07-19 11:30:57 +0200 |
commit | 992f7cbae420ab1b71fd9f2c2ae10c9804c1d213 (patch) | |
tree | 0ddb41ced462bf3fc0feebc1b5a14df76b4966aa /libfdisk/src/dos.c | |
parent | libfdisk: (dos) return EINVAL when delete unused partition (diff) | |
download | kernel-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.c | 6 |
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); |