From ddf7850f2b775c2148f76cd7e839b8a6e667de8e Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Wed, 16 Sep 2009 03:03:13 +0200 Subject: fdisk: add a warning and truncate disks with >= 2^32 sectors As a result, for sectors we can use uint32_t instead of long long, and on 32 bits it has drastic effects: function old new delta get_geometry 619 646 +27 set_sun_partition 148 150 +2 get_partition 134 135 +1 xbsd_write_bootstrap 382 381 -1 xbsd_readlabel 247 246 -1 bsd_select 1674 1672 -2 sun_other_endian 4 1 -3 scsi_disk 4 1 -3 floppy 4 1 -3 fdisk_main 3735 3732 -3 read_maybe_empty 43 37 -6 create_doslabel 111 104 -7 read_line 97 88 -9 add_logical 117 107 -10 write_table 599 588 -11 new_partition 1684 1670 -14 list_disk_geometry 229 215 -14 wrong_p_order 130 110 -20 xselect 3142 3114 -28 seek_sector 71 40 -31 get_boot 1576 1533 -43 fill_bounds 174 128 -46 delete_partition 603 551 -52 list_table 1401 1232 -169 set_partition 459 286 -173 verify 1840 1495 -345 add_partition 2486 1270 -1216 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 3/24 up/down: 30/-2210) Total: -2180 bytes text data bss dec hex filename 848812 460 7116 856388 d1144 busybox_old 846620 460 7108 854188 d08ac busybox_unstripped Signed-off-by: Denys Vlasenko --- util-linux/fdisk_sgi.c | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) (limited to 'util-linux/fdisk_sgi.c') diff --git a/util-linux/fdisk_sgi.c b/util-linux/fdisk_sgi.c index 51cf30c98..0e3cff50c 100644 --- a/util-linux/fdisk_sgi.c +++ b/util-linux/fdisk_sgi.c @@ -36,7 +36,7 @@ struct device_parameter { /* 48 bytes */ unsigned short nsect; /* sectors/tracks in cyl 0 or vol 0 */ unsigned short bytes; unsigned short ilfact; - unsigned int flags; /* controller flags */ + unsigned int flags; /* controller flags */ unsigned int datarate; unsigned int retries_on_error; unsigned int ms_per_word; @@ -70,7 +70,7 @@ typedef struct { unsigned int vol_file_start; /* number of logical block */ unsigned int vol_file_size; /* number of bytes */ } directory[15]; - struct sgi_partinfo { /* 16 * 12 bytes */ + struct sgi_partinfo { /* 16 * 12 bytes */ unsigned int num_sectors; /* number of blocks */ unsigned int start_sector; /* must be cylinder aligned */ unsigned int id; @@ -291,11 +291,11 @@ sgi_list_table(int xtra) int kpi = 0; /* kernel partition ID */ if (xtra) { - printf("\nDisk %s (SGI disk label): %d heads, %d sectors\n" - "%d cylinders, %d physical cylinders\n" - "%d extra sects/cyl, interleave %d:1\n" + printf("\nDisk %s (SGI disk label): %u heads, %u sectors\n" + "%u cylinders, %u physical cylinders\n" + "%u extra sects/cyl, interleave %u:1\n" "%s\n" - "Units = %s of %d * 512 bytes\n\n", + "Units = %s of %u * 512 bytes\n\n", disk_device, g_heads, g_sectors, g_cylinders, SGI_SSWAP16(sgiparam.pcylcount), SGI_SSWAP16(sgiparam.sparecyl), @@ -304,8 +304,8 @@ sgi_list_table(int xtra) str_units(PLURAL), units_per_sector); } else { printf("\nDisk %s (SGI disk label): " - "%d heads, %d sectors, %d cylinders\n" - "Units = %s of %d * 512 bytes\n\n", + "%u heads, %u sectors, %u cylinders\n" + "Units = %s of %u * 512 bytes\n\n", disk_device, g_heads, g_sectors, g_cylinders, str_units(PLURAL), units_per_sector ); } @@ -324,7 +324,7 @@ sgi_list_table(int xtra) uint32_t len = sgi_get_num_sectors(i); kpi++; /* only count nonempty partitions */ printf( - "%2d: %s %4s %9ld %9ld %9ld %2x %s\n", + "%2u: %s %4s %9lu %9lu %9lu %2x %s\n", /* fdisk part number */ i+1, /* device */ partname(disk_device, kpi, w+3), /* flags */ (sgi_get_swappartition() == i) ? "swap" : @@ -345,7 +345,7 @@ sgi_list_table(int xtra) uint32_t len = SGI_SSWAP32(sgilabel->directory[i].vol_file_size); unsigned char *name = sgilabel->directory[i].vol_file_name; - printf("%2d: %-10s sector%5u size%8u\n", + printf("%2u: %-10s sector%5u size%8u\n", i, (char*)name, (unsigned int) start, (unsigned int) len); } } @@ -507,19 +507,19 @@ verify_sgi(int verbose) if ((sgi_get_start_sector(Index[0]) != 0) && verbose) printf("The entire disk partition should start " "at block 0,\n" - "not at diskblock %d\n", + "not at diskblock %u\n", sgi_get_start_sector(Index[0])); if (SGI_DEBUG) /* I do not understand how some disks fulfil it */ if ((sgi_get_num_sectors(Index[0]) != lastblock) && verbose) - printf("The entire disk partition is only %d diskblock large,\n" - "but the disk is %d diskblocks long\n", + printf("The entire disk partition is only %u diskblock large,\n" + "but the disk is %u diskblocks long\n", sgi_get_num_sectors(Index[0]), lastblock); lastblock = sgi_get_num_sectors(Index[0]); } else { if (verbose) printf("One Partition (#11) should cover the entire disk\n"); if (SGI_DEBUG > 2) - printf("sysid=%d\tpartition=%d\n", + printf("sysid=%u\tpartition=%u\n", sgi_get_sysid(Index[0]), Index[0]+1); } for (i = 1, start = 0; i < sortcount; i++) { @@ -528,20 +528,20 @@ verify_sgi(int verbose) if ((sgi_get_start_sector(Index[i]) % cylsize) != 0) { if (SGI_DEBUG) /* I do not understand how some disks fulfil it */ if (verbose) - printf("Partition %d does not start on cylinder boundary\n", + printf("Partition %u does not start on cylinder boundary\n", Index[i]+1); } if (sgi_get_num_sectors(Index[i]) % cylsize != 0) { if (SGI_DEBUG) /* I do not understand how some disks fulfil it */ if (verbose) - printf("Partition %d does not end on cylinder boundary\n", + printf("Partition %u does not end on cylinder boundary\n", Index[i]+1); } /* We cannot handle several "entire disk" entries. */ if (sgi_get_sysid(Index[i]) == SGI_ENTIRE_DISK) continue; if (start > sgi_get_start_sector(Index[i])) { if (verbose) - printf("Partitions %d and %d overlap by %d sectors\n", + printf("Partitions %u and %u overlap by %u sectors\n", Index[i-1]+1, Index[i]+1, start - sgi_get_start_sector(Index[i])); if (gap > 0) gap = -gap; @@ -549,7 +549,7 @@ verify_sgi(int verbose) } if (start < sgi_get_start_sector(Index[i])) { if (verbose) - printf("Unused gap of %8u sectors - sectors %8u-%8u\n", + printf("Unused gap of %u sectors - sectors %u-%u\n", sgi_get_start_sector(Index[i]) - start, start, sgi_get_start_sector(Index[i])-1); gap += sgi_get_start_sector(Index[i]) - start; @@ -559,7 +559,7 @@ verify_sgi(int verbose) + sgi_get_num_sectors(Index[i]); if (SGI_DEBUG > 1) { if (verbose) - printf("%2d:%12d\t%12d\t%12d\n", Index[i], + printf("%2u:%12u\t%12u\t%12u\n", Index[i], sgi_get_start_sector(Index[i]), sgi_get_num_sectors(Index[i]), sgi_get_sysid(Index[i])); @@ -567,7 +567,7 @@ verify_sgi(int verbose) } if (start < lastblock) { if (verbose) - printf("Unused gap of %8u sectors - sectors %8u-%8u\n", + printf("Unused gap of %u sectors - sectors %u-%u\n", lastblock - start, start, lastblock-1); gap += lastblock - start; add2freelist(start, lastblock); @@ -788,7 +788,7 @@ create_sgilabel(void) /* otherwise print error and use truncated version */ g_cylinders = geometry.cylinders; printf( -"Warning: BLKGETSIZE ioctl failed on %s. Using geometry cylinder value of %d.\n" +"Warning: BLKGETSIZE ioctl failed on %s. Using geometry cylinder value of %u.\n" "This value may be truncated for devices > 33.8 GB.\n", disk_device, g_cylinders); } } @@ -799,9 +799,9 @@ create_sgilabel(void) old[i].sysid = get_part_table(i)->sys_ind; old[i].start = get_start_sect(get_part_table(i)); old[i].nsect = get_nr_sects(get_part_table(i)); - printf("Trying to keep parameters of partition %d\n", i); + printf("Trying to keep parameters of partition %u\n", i); if (SGI_DEBUG) - printf("ID=%02x\tSTART=%d\tLENGTH=%d\n", + printf("ID=%02x\tSTART=%u\tLENGTH=%u\n", old[i].sysid, old[i].start, old[i].nsect); } } -- cgit v1.2.3