summaryrefslogtreecommitdiffstats
path: root/common/partitions
diff options
context:
space:
mode:
Diffstat (limited to 'common/partitions')
-rw-r--r--common/partitions/dos.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/common/partitions/dos.c b/common/partitions/dos.c
index 31b1ed60d1..2e39e7d816 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)