[PATCH] partitions: dos: improve guess of disk size

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The code used to ineffectively take the end of the last partition as guess
for the disk size. Better use the end of the partition that has its end
rearmost.

Also return an unsigned type instead of int as the result is always
non-negative.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@xxxxxxxxxxxxxx>
---
Hello,

note this is only compile tested.

Best regards
Uwe

 common/partitions/dos.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/common/partitions/dos.c b/common/partitions/dos.c
index 9afd122..1d8213b 100644
--- a/common/partitions/dos.c
+++ b/common/partitions/dos.c
@@ -27,19 +27,23 @@
  * @param table partition table
  * @return sector count
  */
-static int disk_guess_size(struct device_d *dev, struct partition_entry *table)
+static uint64_t disk_guess_size(struct device_d *dev,
+		struct partition_entry *table)
 {
 	uint64_t size = 0;
 	int i;
 
 	for (i = 0; i < 4; i++) {
-		if (table[i].partition_start != 0) {
-			size += get_unaligned_le32(&table[i].partition_start) - size;
-			size += get_unaligned_le32(&table[i].partition_size);
+		if (get_unaligned_le32(table[i].partition_start) != 0) {
+			uint64_t part_end = get_unaligned_le32(&table[i].partition_start) +
+				get_unaligned_le32(&table[i].partition_size);
+
+			if (size < part_end)
+				size = part_end;
 		}
 	}
 
-	return (int)size;
+	return size;
 }
 
 static void *read_mbr(struct block_device *blk)
-- 
1.8.4.rc3


_______________________________________________
barebox mailing list
barebox@xxxxxxxxxxxxxxxxxxx
http://lists.infradead.org/mailman/listinfo/barebox





[Index of Archives]     [Linux Embedded]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux