]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
sfdisk: write empty label also when only ignored partition specified
authorKarel Zak <kzak@redhat.com>
Thu, 19 Aug 2021 10:10:02 +0000 (12:10 +0200)
committerKarel Zak <kzak@redhat.com>
Thu, 19 Aug 2021 10:10:02 +0000 (12:10 +0200)
sfdisk writes empty disk label only when "label:" header specified.
Unfortunately, this feature is ignored when all specified partitions
are ignored

  echo -e "label: dos\n0,0,0\n" | sfdisk /dev/sdc

Fixes: https://github.com/karelzak/util-linux/issues/1413
Signed-off-by: Karel Zak <kzak@redhat.com>
disk-utils/sfdisk.c

index 526d090071d5fb4a92c25a524ce2d1947fe8f8fa..b08c945c0687944aa4e179cf32a9be1662c1f1e4 100644 (file)
@@ -1714,7 +1714,7 @@ static void refresh_prompt_buffer(struct sfdisk *sf, const char *devname,
  */
 static int command_fdisk(struct sfdisk *sf, int argc, char **argv)
 {
-       int rc = 0, partno = sf->partno, created = 0, unused = 0;
+       int rc = 0, partno = sf->partno, created = 0, unused = 0, ignored = 0;
        struct fdisk_script *dp;
        struct fdisk_table *tb = NULL;
        const char *devname = NULL, *label;
@@ -1897,6 +1897,7 @@ static int command_fdisk(struct sfdisk *sf, int argc, char **argv)
                        if (ignore_partition(pa)) {
                                fdisk_info(sf->cxt, _("Ignoring partition."));
                                next_partno++;
+                               ignored++;
                                continue;
                        }
                        if (!created) {         /* create a new disklabel */
@@ -1960,7 +1961,7 @@ static int command_fdisk(struct sfdisk *sf, int argc, char **argv)
        /* create empty disk label if label, but no partition specified */
        if ((rc == SFDISK_DONE_EOF || rc == SFDISK_DONE_WRITE) && created == 0
            && fdisk_script_has_force_label(dp) == 1
-           && fdisk_table_get_nents(tb) == 0
+           && fdisk_table_get_nents(tb) == (size_t) ignored
            && fdisk_script_get_header(dp, "label")) {
 
                int xrc = fdisk_apply_script_headers(sf->cxt, dp);