From: Karel Zak Date: Thu, 11 Sep 2014 10:48:56 +0000 (+0200) Subject: libfdisk: add fdisk_set_partition() X-Git-Tag: v2.26-rc1~385 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0dad2177852708f7840b600e1db888828c8c521e;p=thirdparty%2Futil-linux.git libfdisk: add fdisk_set_partition() Signed-off-by: Karel Zak --- diff --git a/libfdisk/src/fdiskP.h b/libfdisk/src/fdiskP.h index 1382d9ae73..af0470b682 100644 --- a/libfdisk/src/fdiskP.h +++ b/libfdisk/src/fdiskP.h @@ -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 */ diff --git a/libfdisk/src/libfdisk.h b/libfdisk/src/libfdisk.h index c49b1db1d2..099bfca1bb 100644 --- a/libfdisk/src/libfdisk.h +++ b/libfdisk/src/libfdisk.h @@ -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, diff --git a/libfdisk/src/partition.c b/libfdisk/src/partition.c index bf60fb628b..4f83f72754 100644 --- a/libfdisk/src/partition.c +++ b/libfdisk/src/partition.c @@ -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: