]> err.no Git - util-linux/commitdiff
fdisk: use unsigned long long instead int for sectors
authorKarel Zak <kzak@redhat.com>
Wed, 30 May 2007 15:10:43 +0000 (17:10 +0200)
committerKarel Zak <kzak@redhat.com>
Thu, 31 May 2007 13:00:50 +0000 (15:00 +0200)
The patch is originally based on an old Suse patch.

Signed-off-by: Karel Zak <kzak@redhat.com>
fdisk/fdisk.c
fdisk/fdisk.h
fdisk/fdiskaixlabel.h
fdisk/fdisksgilabel.c
fdisk/fdisksgilabel.h
fdisk/fdisksunlabel.c
fdisk/fdisksunlabel.h

index f831049776f160a363179a5de85892c29a66e129..1d1de5bd18f6cfadcead234008272f5b041e0572 100644 (file)
@@ -62,7 +62,7 @@ static void delete_partition(int i);
 
 /* A valid partition table sector ends in 0x55 0xaa */
 static unsigned int
-part_table_flag(char *b) {
+part_table_flag(unsigned char *b) {
        return ((unsigned int) b[510]) + (((unsigned int) b[511]) << 8);
 }
 
@@ -72,7 +72,7 @@ valid_part_table_flag(unsigned char *b) {
 }
 
 static void
-write_part_table_flag(char *b) {
+write_part_table_flag(unsigned char *b) {
        b[510] = 0x55;
        b[511] = 0xaa;
 }
@@ -99,17 +99,17 @@ set_start_sect(struct partition *p, unsigned int start_sect) {
        store4_little_endian(p->start4, start_sect);
 }
 
-unsigned int
+unsigned long long
 get_start_sect(struct partition *p) {
        return read4_little_endian(p->start4);
 }
 
 static void
-set_nr_sects(struct partition *p, unsigned int nr_sects) {
+set_nr_sects(struct partition *p, unsigned long long nr_sects) {
        store4_little_endian(p->size4, nr_sects);
 }
 
-unsigned int
+unsigned long long
 get_nr_sects(struct partition *p) {
        return read4_little_endian(p->size4);
 }
@@ -121,7 +121,7 @@ static int type_open = O_RDWR;
  * Raw disk label. For DOS-type partition tables the MBR,
  * with descriptions of the primary partitions.
  */
-char MBRbuffer[MAX_SECTOR_SIZE];
+unsigned char MBRbuffer[MAX_SECTOR_SIZE];
 
 /*
  * per partition table entry data
@@ -135,8 +135,8 @@ struct pte {
        struct partition *part_table;   /* points into sectorbuffer */
        struct partition *ext_pointer;  /* points into sectorbuffer */
        char changed;                   /* boolean */
-       unsigned int offset;            /* disk sector number */
-       char *sectorbuffer;             /* disk sector contents */
+       unsigned long long offset;      /* disk sector number */
+       unsigned char *sectorbuffer;    /* disk sector contents */
 } ptes[MAXIMUM_PARTS];
 
 char   *disk_device,                   /* must be specified */
@@ -155,15 +155,14 @@ unsigned int      user_cylinders, user_heads, user_sectors;
 unsigned int   pt_heads, pt_sectors;
 unsigned int   kern_heads, kern_sectors;
 
+unsigned long long sector_offset = 1, extended_offset = 0, sectors;
+
 unsigned int   heads,
-       sectors,
        cylinders,
        sector_size = DEFAULT_SECTOR_SIZE,
        user_set_sector_size = 0,
-       sector_offset = 1,
        units_per_sector = 1,
-       display_in_cyl_units = 1,
-       extended_offset = 0;            /* offset of link pointers */
+       display_in_cyl_units = 1;
 
 unsigned long long total_number_of_sectors;
 
@@ -240,21 +239,21 @@ void fatal(enum failure why) {
 }
 
 static void
-seek_sector(int fd, unsigned int secno) {
+seek_sector(int fd, unsigned long long secno) {
        off_t offset = (off_t) secno * sector_size;
        if (lseek(fd, offset, SEEK_SET) == (off_t) -1)
                fatal(unable_to_seek);
 }
 
 static void
-read_sector(int fd, unsigned int secno, char *buf) {
+read_sector(int fd, unsigned long long secno, unsigned char *buf) {
        seek_sector(fd, secno);
        if (read(fd, buf, sector_size) != sector_size)
                fatal(unable_to_read);
 }
 
 static void
-write_sector(int fd, unsigned int secno, char *buf) {
+write_sector(int fd, unsigned long long secno, unsigned char *buf) {
        seek_sector(fd, secno);
        if (write(fd, buf, sector_size) != sector_size)
                fatal(unable_to_write);
@@ -262,11 +261,11 @@ write_sector(int fd, unsigned int secno, char *buf) {
 
 /* Allocate a buffer and read a partition table sector */
 static void
-read_pte(int fd, int pno, unsigned int offset) {
+read_pte(int fd, int pno, unsigned long long offset) {
        struct pte *pe = &ptes[pno];
 
        pe->offset = offset;
-       pe->sectorbuffer = (char *) malloc(sector_size);
+       pe->sectorbuffer = malloc(sector_size);
        if (!pe->sectorbuffer)
                fatal(out_of_memory);
        read_sector(fd, offset, pe->sectorbuffer);
@@ -274,7 +273,7 @@ read_pte(int fd, int pno, unsigned int offset) {
        pe->part_table = pe->ext_pointer = NULL;
 }
 
-static unsigned int
+static unsigned long long
 get_partition_start(struct pte *pe) {
        return pe->offset + get_start_sect(pe->part_table);
 }
@@ -540,10 +539,10 @@ clear_partition(struct partition *p) {
 }
 
 static void
-set_partition(int i, int doext, unsigned int start, unsigned int stop,
-             int sysid) {
+set_partition(int i, int doext, unsigned long long start,
+             unsigned long long stop, int sysid) {
        struct partition *p;
-       unsigned int offset;
+       unsigned long long offset;
 
        if (doext) {
                p = ptes[i].ext_pointer;
@@ -1536,7 +1535,7 @@ list_disk_geometry(void) {
        else
                printf(_("\nDisk %s: %ld.%ld GB, %lld bytes\n"),
                       disk_device, megabytes/1000, (megabytes/100)%10, bytes);
-       printf(_("%d heads, %d sectors/track, %d cylinders"),
+       printf(_("%d heads, %llu sectors/track, %d cylinders"),
               heads, sectors, cylinders);
        if (units_per_sector == 1)
                printf(_(", total %llu sectors"),
@@ -1768,20 +1767,21 @@ x_list_table(int extend) {
        struct partition *p;
        int i;
 
-       printf(_("\nDisk %s: %d heads, %d sectors, %d cylinders\n\n"),
+       printf(_("\nDisk %s: %d heads, %llu sectors, %d cylinders\n\n"),
                disk_device, heads, sectors, cylinders);
         printf(_("Nr AF  Hd Sec  Cyl  Hd Sec  Cyl     Start      Size ID\n"));
        for (i = 0 ; i < partitions; i++) {
                pe = &ptes[i];
                p = (extend ? pe->ext_pointer : pe->part_table);
                if (p != NULL) {
-                        printf("%2d %02x%4d%4d%5d%4d%4d%5d%11u%11u %02x\n",
+                        printf("%2d %02x%4d%4d%5d%4d%4d%5d%11lu%11lu %02x\n",
                                i + 1, p->boot_ind, p->head,
                                sector(p->sector),
                                cylinder(p->sector, p->cyl), p->end_head,
                                sector(p->end_sector),
                                cylinder(p->end_sector, p->end_cyl),
-                               get_start_sect(p), get_nr_sects(p), p->sys_ind);
+                               (unsigned long) get_start_sect(p),
+                               (unsigned long) get_nr_sects(p), p->sys_ind);
                        if (p->sys_ind)
                                check_consistency(p, i);
                }
@@ -1789,7 +1789,7 @@ x_list_table(int extend) {
 }
 
 static void
-fill_bounds(unsigned int *first, unsigned int *last) {
+fill_bounds(unsigned long long *first, unsigned long long *last) {
        int i;
        struct pte *pe = &ptes[0];
        struct partition *p;
@@ -1822,7 +1822,7 @@ check(int n, unsigned int h, unsigned int s, unsigned int c,
                        n, h + 1, heads);
        if (real_s >= sectors)
                fprintf(stderr, _("Partition %d: sector %d greater than "
-                       "maximum %d\n"), n, s, sectors);
+                       "maximum %llu\n"), n, s, sectors);
        if (real_c >= cylinders)
                fprintf(stderr, _("Partitions %d: cylinder %d greater than "
                        "maximum %d\n"), n, real_c + 1, cylinders);
@@ -1835,8 +1835,8 @@ check(int n, unsigned int h, unsigned int s, unsigned int c,
 static void
 verify(void) {
        int i, j;
-       unsigned int total = 1;
-       unsigned int first[partitions], last[partitions];
+       unsigned long total = 1;
+       unsigned long long first[partitions], last[partitions];
        struct partition *p;
 
        if (warn_geometry())
@@ -1880,7 +1880,7 @@ verify(void) {
 
        if (extended_offset) {
                struct pte *pex = &ptes[ext_index];
-               unsigned int e_last = get_start_sect(pex->part_table) +
+               unsigned long long e_last = get_start_sect(pex->part_table) +
                        get_nr_sects(pex->part_table) - 1;
 
                for (i = 4; i < partitions; i++) {
@@ -1899,8 +1899,8 @@ verify(void) {
        }
 
        if (total > total_number_of_sectors)
-               printf(_("Total allocated sectors %d greater than the maximum "
-                       "%lld\n"), total, total_number_of_sectors);
+               printf(_("Total allocated sectors %ld greater than the maximum"
+                       " %lld\n"), total, total_number_of_sectors);
        else if (total < total_number_of_sectors)
                printf(_("%lld unallocated sectors\n"),
                       total_number_of_sectors - total);
@@ -1913,7 +1913,7 @@ add_partition(int n, int sys) {
        struct partition *p = ptes[n].part_table;
        struct partition *q = ptes[ext_index].part_table;
        long long llimit;
-       unsigned int start, stop = 0, limit, temp,
+       unsigned long long start, stop = 0, limit, temp,
                first[partitions], last[partitions];
 
        if (p && p->sys_ind) {
@@ -1959,7 +1959,7 @@ add_partition(int n, int sys) {
                if (start > limit)
                        break;
                if (start >= temp+units_per_sector && read) {
-                       printf(_("Sector %d is already allocated\n"), temp);
+                       printf(_("Sector %llu is already allocated\n"), temp);
                        temp = start;
                        read = 0;
                }
@@ -2209,14 +2209,14 @@ reread_partition_table(int leave) {
 
 #define MAX_PER_LINE   16
 static void
-print_buffer(char pbuffer[]) {
+print_buffer(unsigned char pbuffer[]) {
        int     i,
                l;
 
        for (i = 0, l = 0; i < sector_size; i++, l++) {
                if (l == 0)
                        printf("0x%03X:", i);
-               printf(" %02X", (unsigned char) pbuffer[i]);
+               printf(" %02X", pbuffer[i]);
                if (l == MAX_PER_LINE - 1) {
                        printf("\n");
                        l = -1;
index 024495be30dcddf0549c18dc7478ae1f93988367..963ef053d79d3b85e26f4950e5924b0825dbc8f1 100644 (file)
@@ -81,8 +81,8 @@ extern unsigned int read_int(unsigned int low, unsigned int dflt,
 #define SINGULAR 1
 extern char *const str_units(int);
 
-extern unsigned int get_start_sect(struct partition *p);
-extern unsigned int get_nr_sects(struct partition *p);
+extern unsigned long long get_start_sect(struct partition *p);
+extern unsigned long long get_nr_sects(struct partition *p);
 
 extern int osf_label;
 
index 45e53aaf8e419742fa25b8ca98c6070231f66c3b..f58f1a0aecedc178895377ed0b0f7a1c7bf27a55 100644 (file)
@@ -19,9 +19,10 @@ typedef struct {
 
 /* fdisk.c */
 #define aixlabel ((aix_partition *)MBRbuffer)
-extern char MBRbuffer[MAX_SECTOR_SIZE];
+extern unsigned char MBRbuffer[MAX_SECTOR_SIZE];
 extern char changed[MAXIMUM_PARTS];
-extern unsigned int heads, sectors, cylinders;
+extern unsigned int heads, cylinders;
+extern unsigned long long sectors;
 extern int show_begin;
 extern int aix_label;
 extern char *partition_type(unsigned char type);
index 487a92f921c30a0d2832531c697821fa60949536..041de784b937edd5de94e7c100213410b126f81c 100644 (file)
@@ -197,7 +197,7 @@ sgi_list_table(int xtra) {
        w = strlen(disk_device);
 
        if (xtra) {
-               printf(_("\nDisk %s (SGI disk label): %d heads, %d sectors\n"
+               printf(_("\nDisk %s (SGI disk label): %d heads, %llu sectors\n"
                         "%d cylinders, %d physical cylinders\n"
                         "%d extra sects/cyl, interleave %d:1\n"
                         "%s\n"
@@ -211,7 +211,7 @@ sgi_list_table(int xtra) {
                        sector_size);
        } else {
                printf(_("\nDisk %s (SGI disk label): "
-                        "%d heads, %d sectors, %d cylinders\n"
+                        "%d heads, %llu sectors, %d cylinders\n"
                         "Units = %s of %d * %d bytes\n\n"),
                       disk_device, heads, sectors, cylinders,
                       str_units(PLURAL), units_per_sector,
index a230196b462eeddfcbb39bd2f837ce5232996274..fa992fc64587535fb5f91321d364a08d47e345b1 100644 (file)
@@ -103,8 +103,9 @@ typedef struct {
 /* fdisk.c */
 #define sgilabel ((sgi_partition *)MBRbuffer)
 #define sgiparam (sgilabel->devparam)
-extern char MBRbuffer[MAX_SECTOR_SIZE];
-extern unsigned int heads, sectors, cylinders, sector_size;
+extern unsigned char MBRbuffer[MAX_SECTOR_SIZE];
+extern unsigned int heads, cylinders, sector_size;
+extern unsigned long long sectors;
 extern int show_begin;
 extern int sgi_label;
 extern char *partition_type(unsigned char type);
index 603b62c457da50729e9515ad1c732c9ceff58b94..a1994e288307cebba8967ef0d4958f8bca2c7f56 100644 (file)
@@ -348,7 +348,7 @@ void create_sunlabel(void)
        }
 
        snprintf(sunlabel->info, sizeof(sunlabel->info),
-                "%s%s%s cyl %d alt %d hd %d sec %d", 
+                "%s%s%s cyl %d alt %d hd %d sec %llu",
                 p ? p->vendor : "", (p && *p->vendor) ? " " : "",
                 p ? p->model
                   : (floppy ? _("3,5\" floppy") : _("Linux custom")),
@@ -655,7 +655,7 @@ sun_list_table(int xtra) {
        w = strlen(disk_device);
        if (xtra)
                printf(
-               _("\nDisk %s (Sun disk label): %d heads, %d sectors, %d rpm\n"
+               _("\nDisk %s (Sun disk label): %d heads, %llu sectors, %d rpm\n"
                "%d cylinders, %d alternate cylinders, %d physical cylinders\n"
                "%d extra sects/cyl, interleave %d:1\n"
                "%s\n"
@@ -669,7 +669,7 @@ sun_list_table(int xtra) {
                       str_units(PLURAL), units_per_sector);
        else
                printf(
-       _("\nDisk %s (Sun disk label): %d heads, %d sectors, %d cylinders\n"
+       _("\nDisk %s (Sun disk label): %d heads, %llu sectors, %d cylinders\n"
        "Units = %s of %d * 512 bytes\n\n"),
                       disk_device, heads, sectors, cylinders,
                       str_units(PLURAL), units_per_sector);
index 81bd72c074ab0146abbdedcd8629fc8539e08b04..312bfea0117d8568880a7dd2f027a750674b3a47 100644 (file)
@@ -37,8 +37,9 @@ typedef struct {
                                 : (__u32)(x))
                                 
 /* fdisk.c */
-extern char MBRbuffer[MAX_SECTOR_SIZE];
-extern unsigned int heads, sectors, cylinders;
+extern unsigned char MBRbuffer[MAX_SECTOR_SIZE];
+extern unsigned int heads, cylinders;
+extern unsigned long long sectors;
 extern int show_begin;
 extern int sun_label;
 extern char *partition_type(unsigned char type);