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 <vda.linux@googlemail.com>
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user