From: Dinar Valeev Date: Sat, 11 May 2013 08:20:10 +0000 (+0200) Subject: Fix partitions bigger than 2TB X-Git-Url: http://git.ozlabs.org/?p=yaboot.git;a=commitdiff_plain;h=422ed3f8a13313f43ac8ff8b001cf3e25ee52b71 Fix partitions bigger than 2TB Partitions which are bigger than 2TB doesn't fit unsigned long, change it ot unsigned long long. Signed-off-by: Dinar Valeev Signed-off-by: Tony Breeds --- diff --git a/include/partition.h b/include/partition.h index 23c99ba..c9c4d0b 100644 --- a/include/partition.h +++ b/include/partition.h @@ -37,8 +37,8 @@ struct partition_t { int part_number; char part_type[MAX_PART_NAME]; char part_name[MAX_PART_NAME]; - unsigned long part_start; /* In blocks */ - unsigned long part_size; /* In blocks */ + unsigned long long part_start; /* In blocks */ + unsigned long long part_size; /* In blocks */ unsigned short blocksize; int sys_ind; /* fs type */ }; diff --git a/second/file.c b/second/file.c index 02b1872..8412075 100644 --- a/second/file.c +++ b/second/file.c @@ -590,7 +590,7 @@ file_block_open( struct boot_file_t* file, prom_printf("no partitions found.\n"); #endif for (p = parts; p && !found; p=p->next) { - DEBUG_F("number: %02d, start: 0x%08lx, length: 0x%08lx\n", + DEBUG_F("number: %02d, start: 0x%08Lx, length: 0x%08Lx\n", p->part_number, p->part_start, p->part_size ); if (partition == -1) { file->fs = fs_open( file, p, fspec ); diff --git a/second/fs_ext2.c b/second/fs_ext2.c index 41a3c79..5d5a5c7 100644 --- a/second/fs_ext2.c +++ b/second/fs_ext2.c @@ -164,8 +164,8 @@ ext2_open( struct boot_file_t* file, */ doff = dend = 0; if (part) { - doff = (unsigned long long)(part->part_start) * part->blocksize; - dend = doff + (unsigned long long)part->part_size * part->blocksize; + doff = part->part_start * part->blocksize; + dend = doff + part->part_size * part->blocksize; } cur_file = file; diff --git a/second/partition.c b/second/partition.c index 7facbc4..64b4725 100644 --- a/second/partition.c +++ b/second/partition.c @@ -68,7 +68,7 @@ static unsigned char block_buffer[MAX_BLOCK_SIZE]; static void add_new_partition(struct partition_t** list, int part_number, const char *part_type, - const char *part_name, unsigned long part_start, unsigned long part_size, + const char *part_name, unsigned long long part_start, unsigned long long part_size, unsigned short part_blocksize, int sys_ind) { struct partition_t* part; @@ -452,7 +452,7 @@ get_part_type(char *device, int partition) return '\0'; for (p = parts; p && !found; p=p->next) { - DEBUG_F("number: %02d, start: 0x%08lx, length: 0x%08lx, type: %s, name: %s\n", + DEBUG_F("number: %02d, start: 0x%08Lx, length: 0x%08Lx, type: %s, name: %s\n", p->part_number, p->part_start, p->part_size, p->part_type, p->part_name); if ((partition >= 0) && (partition == p->part_number)) { type = strdup(p->part_type);