diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2009-09-16 03:03:13 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2009-09-16 03:03:13 +0200 |
commit | ddf7850f2b775c2148f76cd7e839b8a6e667de8e (patch) | |
tree | 7f70a23e698c6a1ddb04416259c65450fbc0d522 /util-linux/fdisk_sgi.c | |
parent | 8dc0e1929e3af3b1673e5a8e486808386400c020 (diff) | |
download | busybox-w32-ddf7850f2b775c2148f76cd7e839b8a6e667de8e.tar.gz busybox-w32-ddf7850f2b775c2148f76cd7e839b8a6e667de8e.tar.bz2 busybox-w32-ddf7850f2b775c2148f76cd7e839b8a6e667de8e.zip |
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>
Diffstat (limited to 'util-linux/fdisk_sgi.c')
-rw-r--r-- | util-linux/fdisk_sgi.c | 46 |
1 files changed, 23 insertions, 23 deletions
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 */ | |||
36 | unsigned short nsect; /* sectors/tracks in cyl 0 or vol 0 */ | 36 | unsigned short nsect; /* sectors/tracks in cyl 0 or vol 0 */ |
37 | unsigned short bytes; | 37 | unsigned short bytes; |
38 | unsigned short ilfact; | 38 | unsigned short ilfact; |
39 | unsigned int flags; /* controller flags */ | 39 | unsigned int flags; /* controller flags */ |
40 | unsigned int datarate; | 40 | unsigned int datarate; |
41 | unsigned int retries_on_error; | 41 | unsigned int retries_on_error; |
42 | unsigned int ms_per_word; | 42 | unsigned int ms_per_word; |
@@ -70,7 +70,7 @@ typedef struct { | |||
70 | unsigned int vol_file_start; /* number of logical block */ | 70 | unsigned int vol_file_start; /* number of logical block */ |
71 | unsigned int vol_file_size; /* number of bytes */ | 71 | unsigned int vol_file_size; /* number of bytes */ |
72 | } directory[15]; | 72 | } directory[15]; |
73 | struct sgi_partinfo { /* 16 * 12 bytes */ | 73 | struct sgi_partinfo { /* 16 * 12 bytes */ |
74 | unsigned int num_sectors; /* number of blocks */ | 74 | unsigned int num_sectors; /* number of blocks */ |
75 | unsigned int start_sector; /* must be cylinder aligned */ | 75 | unsigned int start_sector; /* must be cylinder aligned */ |
76 | unsigned int id; | 76 | unsigned int id; |
@@ -291,11 +291,11 @@ sgi_list_table(int xtra) | |||
291 | int kpi = 0; /* kernel partition ID */ | 291 | int kpi = 0; /* kernel partition ID */ |
292 | 292 | ||
293 | if (xtra) { | 293 | if (xtra) { |
294 | printf("\nDisk %s (SGI disk label): %d heads, %d sectors\n" | 294 | printf("\nDisk %s (SGI disk label): %u heads, %u sectors\n" |
295 | "%d cylinders, %d physical cylinders\n" | 295 | "%u cylinders, %u physical cylinders\n" |
296 | "%d extra sects/cyl, interleave %d:1\n" | 296 | "%u extra sects/cyl, interleave %u:1\n" |
297 | "%s\n" | 297 | "%s\n" |
298 | "Units = %s of %d * 512 bytes\n\n", | 298 | "Units = %s of %u * 512 bytes\n\n", |
299 | disk_device, g_heads, g_sectors, g_cylinders, | 299 | disk_device, g_heads, g_sectors, g_cylinders, |
300 | SGI_SSWAP16(sgiparam.pcylcount), | 300 | SGI_SSWAP16(sgiparam.pcylcount), |
301 | SGI_SSWAP16(sgiparam.sparecyl), | 301 | SGI_SSWAP16(sgiparam.sparecyl), |
@@ -304,8 +304,8 @@ sgi_list_table(int xtra) | |||
304 | str_units(PLURAL), units_per_sector); | 304 | str_units(PLURAL), units_per_sector); |
305 | } else { | 305 | } else { |
306 | printf("\nDisk %s (SGI disk label): " | 306 | printf("\nDisk %s (SGI disk label): " |
307 | "%d heads, %d sectors, %d cylinders\n" | 307 | "%u heads, %u sectors, %u cylinders\n" |
308 | "Units = %s of %d * 512 bytes\n\n", | 308 | "Units = %s of %u * 512 bytes\n\n", |
309 | disk_device, g_heads, g_sectors, g_cylinders, | 309 | disk_device, g_heads, g_sectors, g_cylinders, |
310 | str_units(PLURAL), units_per_sector ); | 310 | str_units(PLURAL), units_per_sector ); |
311 | } | 311 | } |
@@ -324,7 +324,7 @@ sgi_list_table(int xtra) | |||
324 | uint32_t len = sgi_get_num_sectors(i); | 324 | uint32_t len = sgi_get_num_sectors(i); |
325 | kpi++; /* only count nonempty partitions */ | 325 | kpi++; /* only count nonempty partitions */ |
326 | printf( | 326 | printf( |
327 | "%2d: %s %4s %9ld %9ld %9ld %2x %s\n", | 327 | "%2u: %s %4s %9lu %9lu %9lu %2x %s\n", |
328 | /* fdisk part number */ i+1, | 328 | /* fdisk part number */ i+1, |
329 | /* device */ partname(disk_device, kpi, w+3), | 329 | /* device */ partname(disk_device, kpi, w+3), |
330 | /* flags */ (sgi_get_swappartition() == i) ? "swap" : | 330 | /* flags */ (sgi_get_swappartition() == i) ? "swap" : |
@@ -345,7 +345,7 @@ sgi_list_table(int xtra) | |||
345 | uint32_t len = SGI_SSWAP32(sgilabel->directory[i].vol_file_size); | 345 | uint32_t len = SGI_SSWAP32(sgilabel->directory[i].vol_file_size); |
346 | unsigned char *name = sgilabel->directory[i].vol_file_name; | 346 | unsigned char *name = sgilabel->directory[i].vol_file_name; |
347 | 347 | ||
348 | printf("%2d: %-10s sector%5u size%8u\n", | 348 | printf("%2u: %-10s sector%5u size%8u\n", |
349 | i, (char*)name, (unsigned int) start, (unsigned int) len); | 349 | i, (char*)name, (unsigned int) start, (unsigned int) len); |
350 | } | 350 | } |
351 | } | 351 | } |
@@ -507,19 +507,19 @@ verify_sgi(int verbose) | |||
507 | if ((sgi_get_start_sector(Index[0]) != 0) && verbose) | 507 | if ((sgi_get_start_sector(Index[0]) != 0) && verbose) |
508 | printf("The entire disk partition should start " | 508 | printf("The entire disk partition should start " |
509 | "at block 0,\n" | 509 | "at block 0,\n" |
510 | "not at diskblock %d\n", | 510 | "not at diskblock %u\n", |
511 | sgi_get_start_sector(Index[0])); | 511 | sgi_get_start_sector(Index[0])); |
512 | if (SGI_DEBUG) /* I do not understand how some disks fulfil it */ | 512 | if (SGI_DEBUG) /* I do not understand how some disks fulfil it */ |
513 | if ((sgi_get_num_sectors(Index[0]) != lastblock) && verbose) | 513 | if ((sgi_get_num_sectors(Index[0]) != lastblock) && verbose) |
514 | printf("The entire disk partition is only %d diskblock large,\n" | 514 | printf("The entire disk partition is only %u diskblock large,\n" |
515 | "but the disk is %d diskblocks long\n", | 515 | "but the disk is %u diskblocks long\n", |
516 | sgi_get_num_sectors(Index[0]), lastblock); | 516 | sgi_get_num_sectors(Index[0]), lastblock); |
517 | lastblock = sgi_get_num_sectors(Index[0]); | 517 | lastblock = sgi_get_num_sectors(Index[0]); |
518 | } else { | 518 | } else { |
519 | if (verbose) | 519 | if (verbose) |
520 | printf("One Partition (#11) should cover the entire disk\n"); | 520 | printf("One Partition (#11) should cover the entire disk\n"); |
521 | if (SGI_DEBUG > 2) | 521 | if (SGI_DEBUG > 2) |
522 | printf("sysid=%d\tpartition=%d\n", | 522 | printf("sysid=%u\tpartition=%u\n", |
523 | sgi_get_sysid(Index[0]), Index[0]+1); | 523 | sgi_get_sysid(Index[0]), Index[0]+1); |
524 | } | 524 | } |
525 | for (i = 1, start = 0; i < sortcount; i++) { | 525 | for (i = 1, start = 0; i < sortcount; i++) { |
@@ -528,20 +528,20 @@ verify_sgi(int verbose) | |||
528 | if ((sgi_get_start_sector(Index[i]) % cylsize) != 0) { | 528 | if ((sgi_get_start_sector(Index[i]) % cylsize) != 0) { |
529 | if (SGI_DEBUG) /* I do not understand how some disks fulfil it */ | 529 | if (SGI_DEBUG) /* I do not understand how some disks fulfil it */ |
530 | if (verbose) | 530 | if (verbose) |
531 | printf("Partition %d does not start on cylinder boundary\n", | 531 | printf("Partition %u does not start on cylinder boundary\n", |
532 | Index[i]+1); | 532 | Index[i]+1); |
533 | } | 533 | } |
534 | if (sgi_get_num_sectors(Index[i]) % cylsize != 0) { | 534 | if (sgi_get_num_sectors(Index[i]) % cylsize != 0) { |
535 | if (SGI_DEBUG) /* I do not understand how some disks fulfil it */ | 535 | if (SGI_DEBUG) /* I do not understand how some disks fulfil it */ |
536 | if (verbose) | 536 | if (verbose) |
537 | printf("Partition %d does not end on cylinder boundary\n", | 537 | printf("Partition %u does not end on cylinder boundary\n", |
538 | Index[i]+1); | 538 | Index[i]+1); |
539 | } | 539 | } |
540 | /* We cannot handle several "entire disk" entries. */ | 540 | /* We cannot handle several "entire disk" entries. */ |
541 | if (sgi_get_sysid(Index[i]) == SGI_ENTIRE_DISK) continue; | 541 | if (sgi_get_sysid(Index[i]) == SGI_ENTIRE_DISK) continue; |
542 | if (start > sgi_get_start_sector(Index[i])) { | 542 | if (start > sgi_get_start_sector(Index[i])) { |
543 | if (verbose) | 543 | if (verbose) |
544 | printf("Partitions %d and %d overlap by %d sectors\n", | 544 | printf("Partitions %u and %u overlap by %u sectors\n", |
545 | Index[i-1]+1, Index[i]+1, | 545 | Index[i-1]+1, Index[i]+1, |
546 | start - sgi_get_start_sector(Index[i])); | 546 | start - sgi_get_start_sector(Index[i])); |
547 | if (gap > 0) gap = -gap; | 547 | if (gap > 0) gap = -gap; |
@@ -549,7 +549,7 @@ verify_sgi(int verbose) | |||
549 | } | 549 | } |
550 | if (start < sgi_get_start_sector(Index[i])) { | 550 | if (start < sgi_get_start_sector(Index[i])) { |
551 | if (verbose) | 551 | if (verbose) |
552 | printf("Unused gap of %8u sectors - sectors %8u-%8u\n", | 552 | printf("Unused gap of %u sectors - sectors %u-%u\n", |
553 | sgi_get_start_sector(Index[i]) - start, | 553 | sgi_get_start_sector(Index[i]) - start, |
554 | start, sgi_get_start_sector(Index[i])-1); | 554 | start, sgi_get_start_sector(Index[i])-1); |
555 | gap += sgi_get_start_sector(Index[i]) - start; | 555 | gap += sgi_get_start_sector(Index[i]) - start; |
@@ -559,7 +559,7 @@ verify_sgi(int verbose) | |||
559 | + sgi_get_num_sectors(Index[i]); | 559 | + sgi_get_num_sectors(Index[i]); |
560 | if (SGI_DEBUG > 1) { | 560 | if (SGI_DEBUG > 1) { |
561 | if (verbose) | 561 | if (verbose) |
562 | printf("%2d:%12d\t%12d\t%12d\n", Index[i], | 562 | printf("%2u:%12u\t%12u\t%12u\n", Index[i], |
563 | sgi_get_start_sector(Index[i]), | 563 | sgi_get_start_sector(Index[i]), |
564 | sgi_get_num_sectors(Index[i]), | 564 | sgi_get_num_sectors(Index[i]), |
565 | sgi_get_sysid(Index[i])); | 565 | sgi_get_sysid(Index[i])); |
@@ -567,7 +567,7 @@ verify_sgi(int verbose) | |||
567 | } | 567 | } |
568 | if (start < lastblock) { | 568 | if (start < lastblock) { |
569 | if (verbose) | 569 | if (verbose) |
570 | printf("Unused gap of %8u sectors - sectors %8u-%8u\n", | 570 | printf("Unused gap of %u sectors - sectors %u-%u\n", |
571 | lastblock - start, start, lastblock-1); | 571 | lastblock - start, start, lastblock-1); |
572 | gap += lastblock - start; | 572 | gap += lastblock - start; |
573 | add2freelist(start, lastblock); | 573 | add2freelist(start, lastblock); |
@@ -788,7 +788,7 @@ create_sgilabel(void) | |||
788 | /* otherwise print error and use truncated version */ | 788 | /* otherwise print error and use truncated version */ |
789 | g_cylinders = geometry.cylinders; | 789 | g_cylinders = geometry.cylinders; |
790 | printf( | 790 | printf( |
791 | "Warning: BLKGETSIZE ioctl failed on %s. Using geometry cylinder value of %d.\n" | 791 | "Warning: BLKGETSIZE ioctl failed on %s. Using geometry cylinder value of %u.\n" |
792 | "This value may be truncated for devices > 33.8 GB.\n", disk_device, g_cylinders); | 792 | "This value may be truncated for devices > 33.8 GB.\n", disk_device, g_cylinders); |
793 | } | 793 | } |
794 | } | 794 | } |
@@ -799,9 +799,9 @@ create_sgilabel(void) | |||
799 | old[i].sysid = get_part_table(i)->sys_ind; | 799 | old[i].sysid = get_part_table(i)->sys_ind; |
800 | old[i].start = get_start_sect(get_part_table(i)); | 800 | old[i].start = get_start_sect(get_part_table(i)); |
801 | old[i].nsect = get_nr_sects(get_part_table(i)); | 801 | old[i].nsect = get_nr_sects(get_part_table(i)); |
802 | printf("Trying to keep parameters of partition %d\n", i); | 802 | printf("Trying to keep parameters of partition %u\n", i); |
803 | if (SGI_DEBUG) | 803 | if (SGI_DEBUG) |
804 | printf("ID=%02x\tSTART=%d\tLENGTH=%d\n", | 804 | printf("ID=%02x\tSTART=%u\tLENGTH=%u\n", |
805 | old[i].sysid, old[i].start, old[i].nsect); | 805 | old[i].sysid, old[i].start, old[i].nsect); |
806 | } | 806 | } |
807 | } | 807 | } |