diff options
author | Karel Zak | 2014-12-04 10:27:39 +0100 |
---|---|---|
committer | Karel Zak | 2014-12-04 10:27:39 +0100 |
commit | 19ff8ff7c448e4e88e602dde0af4230bff5b4daa (patch) | |
tree | 489b3709b6c98b9970dc5fc97cb68079f29db6cc /libfdisk/src/table.c | |
parent | lsblk: add SUBSYSTEMS column (diff) | |
download | kernel-qcow2-util-linux-19ff8ff7c448e4e88e602dde0af4230bff5b4daa.tar.gz kernel-qcow2-util-linux-19ff8ff7c448e4e88e602dde0af4230bff5b4daa.tar.xz kernel-qcow2-util-linux-19ff8ff7c448e4e88e602dde0af4230bff5b4daa.zip |
libfdisk: fix cfdisk freespace analyze
The problem is how fdisk_partition_cmp_start() compare numbers, the
function returns result from "a->start - b->start", unfortunately the
numbers are uint64, but function returns "int".
Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=1170191
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'libfdisk/src/table.c')
-rw-r--r-- | libfdisk/src/table.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/libfdisk/src/table.c b/libfdisk/src/table.c index 8adbd7f36..9747f7dc8 100644 --- a/libfdisk/src/table.c +++ b/libfdisk/src/table.c @@ -497,13 +497,19 @@ int fdisk_get_freespaces(struct fdisk_context *cxt, struct fdisk_table **tb) rc = fdisk_get_partitions(cxt, &parts); if (rc) goto done; + fdisk_table_sort_partitions(parts, fdisk_partition_cmp_start); fdisk_reset_iter(&itr, FDISK_ITER_FORWARD); last = cxt->first_lba; grain = cxt->grain > cxt->sector_size ? cxt->grain / cxt->sector_size : 1; + DBG(CXT, ul_debugobj(cxt, "initialized: last=%ju, grain=%ju", last, grain)); + /* analyze gaps between partitions */ while (rc == 0 && fdisk_table_next_partition(parts, &itr, &pa) == 0) { + + DBG(CXT, ul_debugobj(cxt, "partno=%zu, start=%ju", pa->partno, pa->start)); + if (!pa->used || pa->wholedisk || fdisk_partition_is_nested(pa) || !fdisk_partition_has_start(pa)) continue; |