Port MTD structures to use 64-bit byte offsets instead of sectors.

As per the discussion on issue 221745 we will be using 64-bit byte offsets
for the MTD partition table and converting to/from sectors internally in cgpt.
Existing interfaces do not change, eg sizes are still reported in sectors, only
the on-disk representation is affected.

BRANCH=none
BUG=chromium:221745
TEST=unit tests pass

Change-Id: Id312d42783acfdabe6eb8aea11dcbd298e00a100
Reviewed-on: https://gerrit.chromium.org/gerrit/60919
Commit-Queue: Albert Chaulk <achaulk@chromium.org>
Reviewed-by: Albert Chaulk <achaulk@chromium.org>
Tested-by: Albert Chaulk <achaulk@chromium.org>
This commit is contained in:
Albert Chaulk
2013-06-25 11:30:46 -07:00
committed by ChromeBot
parent 7d401c5cd5
commit 289b604f61
7 changed files with 119 additions and 75 deletions

View File

@@ -103,9 +103,14 @@ static int MtdSetEntryAttributes(struct drive *drive,
entry = MtdGetEntry(&drive->mtd, PRIMARY, index);
if (params->set_begin)
entry->starting_lba = params->begin;
if (params->set_size)
entry->ending_lba = entry->starting_lba + params->size - 1;
memcpy(&entry->starting_offset, &params->begin, sizeof(params->begin));
if (params->set_size) {
uint64_t start;
uint64_t end;
MtdGetPartitionSize(entry, &start, NULL, NULL);
end = start + params->size - 1;
memcpy(&entry->ending_offset, &end, sizeof(end));
}
if (params->set_type)
MtdSetEntryType(entry, LookupMtdTypeForGuid(&params->type_guid));
@@ -273,14 +278,10 @@ int CgptGetPartitionDetails(CgptAddParams *params) {
if(drive.is_mtd) {
MtdDiskPartition *entry = MtdGetEntry(&drive.mtd, PRIMARY, index);
uint64_t start_lba, end_lba;
const Guid *guid = LookupGuidForMtdType(MtdGetEntryType(entry));
memcpy(&params->type_guid, guid, sizeof(params->type_guid));
memset(&params->unique_guid, 0, sizeof(params->unique_guid));
start_lba = entry->starting_lba;
end_lba = entry->ending_lba;
params->begin = start_lba;
params->size = end_lba - start_lba + 1;
MtdGetPartitionSizeInSectors(entry, &params->begin, NULL, &params->size);
params->raw_value = entry->flags;
} else {
// GPT-specific code