[PATCH 2/2] Fix partitions bigger than 2TB

Dinar valeev k0da at opensuse.org
Sat May 11 18:20:10 EST 2013


From: Dinar Valeev <dvaleev at suse.com>

Partitions which are bigger than 2TB doesn't fit unsigned long,
change it ot unsigned long long.

Signed-off-by: Dinar Valeev <dvaleev at suse.com>
---
 include/partition.h | 4 ++--
 second/file.c       | 2 +-
 second/fs_ext2.c    | 4 ++--
 second/partition.c  | 4 ++--
 4 files changed, 7 insertions(+), 7 deletions(-)

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 fd081a3..a276a72 100644
--- a/second/file.c
+++ b/second/file.c
@@ -582,7 +582,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 a85958f..742af27 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);
-- 
1.8.1.4



More information about the Yaboot-devel mailing list