aboutsummaryrefslogtreecommitdiff
path: root/util-linux/fdisk_sgi.c
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2009-09-16 03:03:13 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2009-09-16 03:03:13 +0200
commitddf7850f2b775c2148f76cd7e839b8a6e667de8e (patch)
tree7f70a23e698c6a1ddb04416259c65450fbc0d522 /util-linux/fdisk_sgi.c
parent8dc0e1929e3af3b1673e5a8e486808386400c020 (diff)
downloadbusybox-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.c46
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 }