]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
sfdisk: use fdisk_set_partition_type()
authorKarel Zak <kzak@redhat.com>
Wed, 17 Sep 2014 10:24:33 +0000 (12:24 +0200)
committerKarel Zak <kzak@redhat.com>
Tue, 7 Oct 2014 12:55:32 +0000 (14:55 +0200)
This is more simple than the generic fdisk_set_partition() API.

Signed-off-by: Karel Zak <kzak@redhat.com>
disk-utils/sfdisk.c

index 3cc93285561a5a8d6485695f5dbe31ad69a585d3..18a646bb0bf40840303146af06ddd029eadcafed 100644 (file)
@@ -460,7 +460,6 @@ static int command_parttype(struct sfdisk *sf, int argc, char **argv)
        int rc;
        size_t partno, n;
        struct fdisk_label *lb = NULL;
-       struct fdisk_partition *pa = NULL;
        struct fdisk_parttype *type = NULL;
        const char *devname = NULL, *typestr = NULL;
 
@@ -497,6 +496,7 @@ static int command_parttype(struct sfdisk *sf, int argc, char **argv)
        /* print partition type */
        if (!typestr) {
                const struct fdisk_parttype *t = NULL;
+               struct fdisk_partition *pa = NULL;
 
                if (fdisk_get_partition(sf->cxt, partno - 1, &pa) == 0)
                        t = fdisk_partition_get_type(pa);
@@ -510,36 +510,25 @@ static int command_parttype(struct sfdisk *sf, int argc, char **argv)
                        printf("%s\n", fdisk_parttype_get_string(t));
 
                fdisk_unref_partition(pa);
-               fdisk_deassign_device(sf->cxt, 0);
+               fdisk_deassign_device(sf->cxt, 1);
                return 0;
        }
 
        /* parse <type> and apply yo PT */
        type = fdisk_label_parse_parttype(lb, typestr);
-       if (!type || fdisk_parttype_is_unknown(type)) {
-               rc = -EINVAL;
-               warnx(_("failed to parse %s partition type '%s'"),
+       if (!type || fdisk_parttype_is_unknown(type))
+               errx(EXIT_FAILURE, _("failed to parse %s partition type '%s'"),
                                fdisk_label_get_name(lb), typestr);
-               goto done;
-       }
 
-       pa = fdisk_new_partition();
-       if (!pa)
-               err(EXIT_FAILURE, _("failed to allocate partition"));
-       rc = fdisk_partition_set_type(pa, type);
+       else if (fdisk_set_partition_type(sf->cxt, partno - 1, type) != 0)
+               errx(EXIT_FAILURE, _("%s: partition %zu: failed to set partition type"),
+                                               devname, partno);
 
-       if (!rc) {
-               rc = fdisk_set_partition(sf->cxt, partno - 1, pa);      /* apply to disklabel */
-               if (rc)
-                       warnx(_("%s: partition %zu: failed to appply type to disk label"),
-                                       devname, partno);
-       }
-done:
-       fdisk_unref_partition(pa);
+       fdisk_free_parttype(type);
        if (!rc)
                rc = fdisk_write_disklabel(sf->cxt);
        if (!rc)
-               rc = fdisk_deassign_device(sf->cxt, 1);
+               rc = fdisk_deassign_device(sf->cxt, 0);
        return rc;
 }