]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libfdisk: add fdisk_set_partition()
authorKarel Zak <kzak@redhat.com>
Thu, 11 Sep 2014 10:48:56 +0000 (12:48 +0200)
committerKarel Zak <kzak@redhat.com>
Tue, 7 Oct 2014 12:55:31 +0000 (14:55 +0200)
Signed-off-by: Karel Zak <kzak@redhat.com>
libfdisk/src/fdiskP.h
libfdisk/src/libfdisk.h
libfdisk/src/partition.c

index 1382d9ae736a550abbbd59e8011fc54f83f387f2..af0470b6827c37a7f348165fdee4dda7fc369ce5 100644 (file)
@@ -201,6 +201,9 @@ struct fdisk_label_operations {
        /* fill in partition struct */
        int (*get_part)(struct fdisk_context *cxt, size_t n,
                                                struct fdisk_partition *pa);
+       /* modify partition */
+       int (*set_part)(struct fdisk_context *cxt, size_t n,
+                                               struct fdisk_partition *pa);
 
 /*** TODO use set_part() */
        /* get partition type */
index c49b1db1d2a69361d3a2299ae07bafd159100f61..099bfca1bb41cde599219962e80509a00ce5b98a 100644 (file)
@@ -198,6 +198,7 @@ extern int fdisk_get_disklabel_id(struct fdisk_context *cxt, char **id);
 extern int fdisk_set_disklabel_id(struct fdisk_context *cxt);
 
 extern int fdisk_get_partition(struct fdisk_context *cxt, size_t partno, struct fdisk_partition **pa);
+extern int fdisk_set_partition(struct fdisk_context *cxt, size_t partno, struct fdisk_partition *pa);
 extern int fdisk_add_partition(struct fdisk_context *cxt, struct fdisk_partition *pa, size_t *partno);
 extern int fdisk_delete_partition(struct fdisk_context *cxt, size_t partno);
 
@@ -206,6 +207,7 @@ extern int fdisk_delete_all_partitions(struct fdisk_context *cxt);
 extern int fdisk_set_partition_type(struct fdisk_context *cxt, size_t partnum,
                             struct fdisk_parttype *t);
 
+
 extern int fdisk_label_get_fields_ids(
                        struct fdisk_label *lb,
                        struct fdisk_context *cxt,
index bf60fb628bf37ebd86ed4a5ecd788168cfd71576..4f83f727545417b20fd942d184a5b6c1fe512a8e 100644 (file)
@@ -589,6 +589,34 @@ int fdisk_get_partition(struct fdisk_context *cxt, size_t partno,
        return rc;
 }
 
+/**
+ * fdisk_set_partition:
+ * @cxt: context
+ * @partno: partition nuymber
+ * @pa: new partition setting
+ *
+ * Returns: 0 on success, <0 on error.
+ */
+int fdisk_set_partition(struct fdisk_context *cxt, size_t partno,
+                       struct fdisk_partition *pa)
+{
+       if (!cxt || !cxt->label || !pa)
+               return -EINVAL;
+       if (!cxt->label->op->set_part)
+               return -ENOSYS;
+
+       DBG(CXT, ul_debugobj(cxt, "setting partition %zu %p (start=%ju, end=%ju, size=%ju, "
+                   "defaults(start=%s, end=%s, partno=%s)",
+                   partno, pa,
+                   pa->start,
+                   pa->end,
+                   pa->size,
+                   pa->start_follow_default ? "yes" : "no",
+                   pa->end_follow_default ? "yes" : "no",
+                   pa->partno_follow_default ? "yes" : "no"));
+
+       return cxt->label->op->set_part(cxt, partno, pa);
+}
 
 /**
  * fdisk_add_partition: