From: Karel Zak Date: Thu, 9 Oct 2014 10:02:17 +0000 (+0200) Subject: libfdisk: allow to specify partition size by explicit number of sectors X-Git-Tag: v2.26-rc1~336 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=892c89eb76e7c274cade8cbd8b4cdc5f5f5c9790;p=thirdparty%2Futil-linux.git libfdisk: allow to specify partition size by explicit number of sectors Signed-off-by: Karel Zak --- diff --git a/libfdisk/src/fdiskP.h b/libfdisk/src/fdiskP.h index 6dff06b974..e1b4636213 100644 --- a/libfdisk/src/fdiskP.h +++ b/libfdisk/src/fdiskP.h @@ -142,6 +142,7 @@ struct fdisk_partition { unsigned int partno_follow_default : 1, /* use default partno */ start_follow_default : 1, /* use default start */ end_follow_default : 1, /* use default end */ + size_explicit : 1, /* don't align the size */ freespace : 1, /* this is free space */ container : 1, /* container partition (e.g. extended partition) */ wholedisk : 1, /* special system partition */ diff --git a/libfdisk/src/libfdisk.h b/libfdisk/src/libfdisk.h index 96c6bfaef0..a01481f21f 100644 --- a/libfdisk/src/libfdisk.h +++ b/libfdisk/src/libfdisk.h @@ -250,6 +250,7 @@ extern int fdisk_partition_cmp_start(struct fdisk_partition *a, extern int fdisk_partition_set_end(struct fdisk_partition *pa, uint64_t off); extern uint64_t fdisk_partition_get_end(struct fdisk_partition *pa); extern int fdisk_partition_set_size(struct fdisk_partition *pa, uint64_t size); +extern int fdisk_partition_size_explicit(struct fdisk_partition *pa, int enable); extern uint64_t fdisk_partition_get_size(struct fdisk_partition *pa); extern int fdisk_partition_set_partno(struct fdisk_partition *pa, size_t n); diff --git a/libfdisk/src/partition.c b/libfdisk/src/partition.c index c9b596b6bb..c6142900e8 100644 --- a/libfdisk/src/partition.c +++ b/libfdisk/src/partition.c @@ -337,6 +337,25 @@ int fdisk_partition_end_is_default(struct fdisk_partition *pa) return pa->end_follow_default; } +/** + * fdisk_partition_size_explicit: + * @pa: partition + * @enable: 0|1 + * + * By default libfdisk aligns the size when add the new partition (by + * fdisk_add_partrition()). If you want to disable this functionality use + * @enable = 1. + * + * Returns: 0 on success, <0 on error. + */ +int fdisk_partition_size_explicit(struct fdisk_partition *pa, int enable) +{ + if (!pa) + return -EINVAL; + pa->size_explicit = enable ? 1 : 0; + return 0; +} + const char *fdisk_partition_get_uuid(struct fdisk_partition *pa) { return pa ? pa->uuid : NULL; @@ -601,7 +620,8 @@ int fdisk_get_partition(struct fdisk_context *cxt, size_t partno, *pa = NULL; } else fdisk_reset_partition(*pa); - } + } else + (*pa)->size_explicit = 1; return rc; }