summaryrefslogtreecommitdiffstats
path: root/libfdisk/src/table.c
diff options
context:
space:
mode:
authorKarel Zak2014-10-15 12:17:40 +0200
committerKarel Zak2014-10-15 12:17:40 +0200
commitecf40cda764496d3d1b29435ea64a65335ae0acf (patch)
tree9ef1d00a3906fd495194b88ca5023c9729353df0 /libfdisk/src/table.c
parenttests: check for wipefs and helpers in fdisk tests (diff)
downloadkernel-qcow2-util-linux-ecf40cda764496d3d1b29435ea64a65335ae0acf.tar.gz
kernel-qcow2-util-linux-ecf40cda764496d3d1b29435ea64a65335ae0acf.tar.xz
kernel-qcow2-util-linux-ecf40cda764496d3d1b29435ea64a65335ae0acf.zip
libfdisk: make it possible to use zero for size and start
The zero may be valid size and start of the partition. This patch introduces: fdisk_partition_has_start() fdisk_partition_has_size() fdisk_partition_unset_size() fdisk_partition_unset_start() to make it possible to work with zero. The feature is internally implemented by magic constant ((type) -1) for undefined sizes and offsets. Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'libfdisk/src/table.c')
-rw-r--r--libfdisk/src/table.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/libfdisk/src/table.c b/libfdisk/src/table.c
index fb8f52c7e..ea392d900 100644
--- a/libfdisk/src/table.c
+++ b/libfdisk/src/table.c
@@ -413,13 +413,15 @@ static int check_container_freespace(struct fdisk_context *cxt,
assert(parts);
assert(tb);
assert(cont);
+ assert(fdisk_partition_has_start(cont));
last = fdisk_partition_get_start(cont);
grain = cxt->grain > cxt->sector_size ? cxt->grain / cxt->sector_size : 1;
fdisk_reset_iter(&itr, FDISK_ITER_FORWARD);
while (fdisk_table_next_partition(parts, &itr, &pa) == 0) {
- if (!pa->used || !fdisk_partition_is_nested(pa))
+ if (!pa->used || !fdisk_partition_is_nested(pa)
+ || !fdisk_partition_has_start(pa))
continue;
lastplusoff = last + cxt->first_lba;
@@ -476,7 +478,8 @@ int fdisk_get_freespaces(struct fdisk_context *cxt, struct fdisk_table **tb)
/* analyze gaps between partitions */
while (rc == 0 && fdisk_table_next_partition(parts, &itr, &pa) == 0) {
- if (!pa->used || pa->wholedisk || fdisk_partition_is_nested(pa))
+ if (!pa->used || pa->wholedisk || fdisk_partition_is_nested(pa)
+ || !fdisk_partition_has_start(pa))
continue;
DBG(CXT, ul_debugobj(cxt, "freespace analyze: partno=%zu, start=%ju, end=%ju",
pa->partno, pa->start, pa->end));
@@ -524,6 +527,8 @@ int fdisk_table_wrong_order(struct fdisk_table *tb)
fdisk_reset_iter(&itr, FDISK_ITER_FORWARD);
while (tb && fdisk_table_next_partition(tb, &itr, &pa) == 0) {
+ if (!fdisk_partition_has_start(pa))
+ continue;
if (pa->start < last)
return 1;
last = pa->start;
@@ -556,7 +561,7 @@ int fdisk_apply_table(struct fdisk_context *cxt, struct fdisk_table *tb)
fdisk_reset_iter(&itr, FDISK_ITER_FORWARD);
while (tb && fdisk_table_next_partition(tb, &itr, &pa) == 0) {
- if (!pa->start && !pa->start_follow_default)
+ if (!fdisk_partition_has_start(pa) && !pa->start_follow_default)
continue;
rc = fdisk_add_partition(cxt, pa, NULL);
if (rc)