]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
sfdisk: fix previous --append patch, improve man page
authorKarel Zak <kzak@redhat.com>
Mon, 2 Mar 2020 13:41:39 +0000 (14:41 +0100)
committerKarel Zak <kzak@redhat.com>
Mon, 2 Mar 2020 13:41:39 +0000 (14:41 +0100)
- fix stupid typo (!has_container_or_unused(sf))
- use fdisk_is_partition_used() as fdisk_get_partition() returns
  nothing for unused partition
- update tests
- add more hints to the man page

Addresses: https://github.com/calamares/calamares/issues/1332
Signed-off-by: Karel Zak <kzak@redhat.com>
disk-utils/sfdisk.8
disk-utils/sfdisk.c
tests/expected/sfdisk/dos-dump-gaps
tests/expected/sfdisk/dos-dump-old

index 2ba72b136929e6701840191cf0baed767d924d4c..8b96b2e31690f2aff5549298a56f90ee67aee887 100644 (file)
@@ -74,6 +74,10 @@ the event handling on the device.  For example:
 .sp
 .RE
 Note, this semantic is not currently supported by udevd for MD and DM devices.
+.PP
+The sfdisk prompt is only a hint for users and a displayed partition number does
+not mean that the same partition table entry will be created (if -N not
+specified), especially for tables with gaps.
 
 .SH COMMANDS
 The commands are mutually exclusive.
@@ -189,6 +193,10 @@ tools can automatically relocate the header to follow the standard.
 .TP
 .BR \-a , " \-\-append"
 Don't create a new partition table, but only append the specified partitions.
+.sp
+Note that unused partition maybe be re-used in this case although it is not the
+last partition in the partition table. See also \fB\-N\fR to specify entry in
+the partition table.
 .TP
 .BR \-b , " \-\-backup"
 Back up the current partition table sectors before starting the partitioning.
index adeed1cbdabd8a79d2dc42f231dd11c2b35cfba8..c77d4942a5dbf07a860960a89b055e2f4e33dfb5 100644 (file)
@@ -1530,10 +1530,13 @@ static int has_container_or_unused(struct sfdisk *sf)
 
        nparts = fdisk_get_npartitions(sf->cxt);
        for (i = 0; i < nparts; i++) {
+
+               if (!fdisk_is_partition_used(sf->cxt, i)) {
+                       sf->unused = 1;
+                       continue;
+               }
                if (fdisk_get_partition(sf->cxt, i, &pa) != 0)
                        continue;
-               if (!fdisk_partition_is_used(pa))
-                       sf->unused = 1;
                if (fdisk_partition_is_container(pa))
                        sf->container = 1;
        }
@@ -1840,7 +1843,7 @@ static int command_fdisk(struct sfdisk *sf, int argc, char **argv)
                if (created
                    && partno < 0
                    && next_partno == fdisk_get_npartitions(sf->cxt)
-                   && has_container_or_unused(sf)) {
+                   && !has_container_or_unused(sf)) {
                        fdisk_info(sf->cxt, _("All partitions used."));
                        rc = SFDISK_DONE_ASK;
                        break;
index 51ad609163c0d018c2d59d8a5547873a1139374b..26a6e93f2c315d88cf775eadcc6f4e058c640f69 100644 (file)
@@ -12,7 +12,7 @@ I/O size (minimum/optimal): 4096 bytes / <removed> bytes
 <removed>2: Ignoring partition.
 <removed>3: Created a new <removed>.
 <removed>4: Ignoring partition.
-All partitions used.
+<removed>5: Done.
 
 New situation:
 Disklabel type: dos
index 06bbf281e3a18435e62307f8cc45539048dc7397..eb0cc114f195ac160b68c29fed6a9bd4e9314151 100644 (file)
@@ -12,7 +12,7 @@ I/O size (minimum/optimal): 4096 bytes / <removed> bytes
 <removed>2: Ignoring partition.
 <removed>3: Ignoring partition.
 <removed>4: Ignoring partition.
-All partitions used.
+<removed>5: Done.
 
 New situation:
 Disklabel type: dos