rdate: make it do something remotely sane, facing 32-bit time overflow
[oweals/busybox.git] / util-linux / fdisk_sgi.c
index 5a86a6848546d501e25fde7f4af983489f2d7962..30def09c63ebdd67d29d706386dfd6d5c6b025be 100644 (file)
@@ -1,13 +1,13 @@
-#if ENABLE_FEATURE_SGI_LABEL
-
-#define SGI_DEBUG 0
-
 /*
  * Copyright (C) Andreas Neuper, Sep 1998.
- *      This file may be modified and redistributed under
- *      the terms of the GNU Public License.
+ *
+ * Licensed under GPLv2, see file LICENSE in this source tree.
  */
 
+#if ENABLE_FEATURE_SGI_LABEL
+
+#define SGI_DEBUG 0
+
 #define SGI_VOLHDR      0x00
 /* 1 and 2 were used for drive types no longer supported by SGI */
 #define SGI_SWAP        0x03
@@ -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);
                }
        }
@@ -440,7 +440,7 @@ sgi_write_table(void)
                (unsigned int*)sgilabel, sizeof(*sgilabel)) == 0);
 
        write_sector(0, sgilabel);
-       if (!strncmp((char*)sgilabel->directory[0].vol_file_name, "sgilabel", 8)) {
+       if (is_prefixed_with((char*)sgilabel->directory[0].vol_file_name, "sgilabel")) {
                /*
                 * keep this habit of first writing the "sgilabel".
                 * I never tested whether it works without (AN 981002).
@@ -504,22 +504,24 @@ verify_sgi(int verbose)
        if (sgi_get_sysid(Index[0]) == SGI_ENTIRE_DISK) {
                if ((Index[0] != 10) && verbose)
                        printf("IRIX likes when Partition 11 covers the entire disk\n");
-               if ((sgi_get_start_sector(Index[0]) != 0) && 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_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 +530,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 +551,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 +561,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 +569,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);
@@ -669,16 +671,17 @@ sgi_set_volhdr(void)
        int n;
 
        for (n = 8; n < g_partitions; n++) {
-       if (!sgi_get_num_sectors(n)) {
-               /*
-                * 5 cylinders is an arbitrary value I like
-                * IRIX 5.3 stored files in the volume header
-                * (like sash, symmon, fx, ide) with ca. 3200
-                * sectors.
-                */
-               if (g_heads * g_sectors * 5 < sgi_get_lastblock())
-                       sgi_set_partition(n, 0, g_heads * g_sectors * 5, SGI_VOLHDR);
-                       break;
+               if (!sgi_get_num_sectors(n)) {
+                       /*
+                        * 5 cylinders is an arbitrary value I like
+                        * IRIX 5.3 stored files in the volume header
+                        * (like sash, symmon, fx, ide) with ca. 3200
+                        * sectors.
+                        */
+                       if (g_heads * g_sectors * 5 < sgi_get_lastblock()) {
+                               sgi_set_partition(n, 0, g_heads * g_sectors * 5, SGI_VOLHDR);
+                               break;
+                       }
                }
        }
 }
@@ -788,7 +791,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 +802,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);
                        }
                }