From 1aa32c3dd0326f75af65020163e32e600bdd259b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Fri, 5 Nov 2010 19:54:57 +0000 Subject: [PATCH] if total sectors is greater than 0xffffffff, use this value for ReadCapacity(). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39313 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/kernel/bus_managers/ata/ATADevice.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/add-ons/kernel/bus_managers/ata/ATADevice.cpp b/src/add-ons/kernel/bus_managers/ata/ATADevice.cpp index 8ba6ebace0..ce67d0bcd4 100644 --- a/src/add-ons/kernel/bus_managers/ata/ATADevice.cpp +++ b/src/add-ons/kernel/bus_managers/ata/ATADevice.cpp @@ -179,8 +179,11 @@ ATADevice::ReadCapacity(ATARequest *request) scsi_res_read_capacity data; data.block_size = B_HOST_TO_BENDIAN_INT32(fBlockSize); - uint32 lastBlock = fTotalSectors - 1; - data.lba = B_HOST_TO_BENDIAN_INT32(lastBlock); + if (fTotalSectors <= UINT_MAX) { + uint32 lastBlock = fTotalSectors - 1; + data.lba = B_HOST_TO_BENDIAN_INT32(lastBlock); + } else + data.lba = UINT_MAX; TRACE("returning last block: %lu\n", B_BENDIAN_TO_HOST_INT32(data.lba)); copy_sg_data(ccb, 0, ccb->data_length, &data, sizeof(data), false);