Patch from Denis Vlasenko:
authorRob Landley <rob@landley.net>
Sat, 29 Apr 2006 20:05:17 +0000 (20:05 -0000)
committerRob Landley <rob@landley.net>
Sat, 29 Apr 2006 20:05:17 +0000 (20:05 -0000)
* Do not initialize globals to 0, it is done automatically
* unsigned short -> uint16_t,  unsigned int -> uint32_t
  where appropriate (did it ever work on Alphas?)
* triple sync() is silly - removed
* check_zone_nr uses check_zone_nr2 now
* remove trailing periods from messages, uppercase first letter

util-linux/fsck_minix.c

index 350c957862f4dab1cabb284f4694b96900f665c5..b90ccc5e3beb1ffb1f4b9989d3a78aa95f74a69c 100644 (file)
@@ -206,28 +206,26 @@ enum { ROOT_INO = 1 };
 #define BITS_PER_BLOCK (BLOCK_SIZE<<3)
 
 static char *program_version = "1.2 - 11/11/96";
-static char *device_name = NULL;
+static char *device_name;
 static int IN;
-static int repair = 0, automatic = 0, verbose = 0, list = 0, show =
-       0, warn_mode = 0, force = 0;
-static int directory = 0, regular = 0, blockdev = 0, chardev = 0, links =
-       0, symlinks = 0, total = 0;
+static int repair, automatic, verbose, list, show, warn_mode, force;
+static int directory, regular, blockdev, chardev, links, symlinks, total;
 
-static int changed = 0;                        /* flags if the filesystem has been changed */
-static int errors_uncorrected = 0;     /* flag if some error was not corrected */
+static int changed;                    /* flags if the filesystem has been changed */
+static int errors_uncorrected; /* flag if some error was not corrected */
 static int dirsize = 16;
 static int namelen = 14;
-static int version2 = 0;
+static int version2;
 static struct termios termios;
-static int termios_set = 0;
+static int termios_set;
 
 /* File-name data */
 enum { MAX_DEPTH = 32 };
-static int name_depth = 0;
+static int name_depth;
 // static char name_list[MAX_DEPTH][BUFSIZ + 1];
-static char **name_list = NULL;
+static char **name_list;
 
-static char *inode_buffer = NULL;
+static char *inode_buffer;
 
 #define Inode (((struct minix_inode *) inode_buffer)-1)
 #define Inode2 (((struct minix2_inode *) inode_buffer)-1)
@@ -251,8 +249,8 @@ static char super_block_buffer[BLOCK_SIZE];
 static char *inode_map;
 static char *zone_map;
 
-static unsigned char *inode_count = NULL;
-static unsigned char *zone_count = NULL;
+static unsigned char *inode_count;
+static unsigned char *zone_count;
 
 static void recursive_check(unsigned int ino);
 #ifdef CONFIG_FEATURE_MINIX2
@@ -375,12 +373,11 @@ static void check_mount(void)
                close(fd);
 
        printf("%s is mounted.   ", device_name);
+       cont = 0;
        if (isatty(0) && isatty(1))
                cont = ask("Do you really want to continue", 0);
-       else
-               cont = 0;
        if (!cont) {
-               printf("check aborted.\n");
+               printf("Check aborted\n");
                exit(0);
        }
        return;
@@ -392,7 +389,7 @@ static void check_mount(void)
  * if an error was corrected, and returns the zone (0 for no zone
  * or a bad zone-number).
  */
-static int check_zone_nr(unsigned short *nr, int *corrected)
+static int check_zone_nr2(uint32_t *nr, int *corrected)
 {
        if (!*nr)
                return 0;
@@ -411,26 +408,13 @@ static int check_zone_nr(unsigned short *nr, int *corrected)
        return 0;
 }
 
-#ifdef CONFIG_FEATURE_MINIX2
-static int check_zone_nr2(unsigned int *nr, int *corrected)
+static int check_zone_nr(uint16_t *nr, int *corrected)
 {
-       if (!*nr)
-               return 0;
-       if (*nr < FIRSTZONE)
-               printf("Zone nr < FIRSTZONE in file `");
-       else if (*nr >= ZONES)
-               printf("Zone nr >= ZONES in file `");
-       else
-               return *nr;
-       print_current_name();
-       printf("'.");
-       if (ask("Remove block", 1)) {
-               *nr = 0;
-               *corrected = 1;
-       }
-       return 0;
+       uint32_t nr32 = *nr;
+       int r = check_zone_nr2(&nr32, corrected);
+       *nr = (uint16_t)nr32;
+       return r;
 }
-#endif
 
 /*
  * read-block reads block nr into the buffer at addr.
@@ -445,14 +429,14 @@ static void read_block(unsigned int nr, char *addr)
                printf("Read error: unable to seek to block in file '");
                print_current_name();
                printf("'\n");
-               memset(addr, 0, BLOCK_SIZE);
                errors_uncorrected = 1;
+               memset(addr, 0, BLOCK_SIZE);
        } else if (BLOCK_SIZE != read(IN, addr, BLOCK_SIZE)) {
                printf("Read error: bad block in file '");
                print_current_name();
                printf("'\n");
-               memset(addr, 0, BLOCK_SIZE);
                errors_uncorrected = 1;
+               memset(addr, 0, BLOCK_SIZE);
        }
 }
 
@@ -480,14 +464,14 @@ static void write_block(unsigned int nr, char *addr)
 }
 
 /*
- * map-block calculates the absolute block nr of a block in a file.
+ * map_block calculates the absolute block nr of a block in a file.
  * It sets 'changed' if the inode has needed changing, and re-writes
  * any indirect blocks with errors.
  */
 static int map_block(struct minix_inode *inode, unsigned int blknr)
 {
-       unsigned short ind[BLOCK_SIZE >> 1];
-       unsigned short dind[BLOCK_SIZE >> 1];
+       uint16_t ind[BLOCK_SIZE >> 1];
+       uint16_t dind[BLOCK_SIZE >> 1];
        int blk_chg, block, result;
 
        if (blknr < 7)
@@ -521,9 +505,9 @@ static int map_block(struct minix_inode *inode, unsigned int blknr)
 #ifdef CONFIG_FEATURE_MINIX2
 static int map_block2(struct minix2_inode *inode, unsigned int blknr)
 {
-       unsigned int ind[BLOCK_SIZE >> 2];
-       unsigned int dind[BLOCK_SIZE >> 2];
-       unsigned int tind[BLOCK_SIZE >> 2];
+       uint32_t ind[BLOCK_SIZE >> 2];
+       uint32_t dind[BLOCK_SIZE >> 2];
+       uint32_t tind[BLOCK_SIZE >> 2];
        int blk_chg, block, result;
 
        if (blknr < 7)
@@ -594,8 +578,6 @@ static void write_super_block(void)
                die("seek failed in write_super_block");
        if (BLOCK_SIZE != write(IN, super_block_buffer, BLOCK_SIZE))
                die("unable to write super-block");
-
-       return;
 }
 
 static void write_tables(void)
@@ -639,18 +621,15 @@ static void read_superblock(void)
                die("seek failed");
        if (BLOCK_SIZE != read(IN, super_block_buffer, BLOCK_SIZE))
                die("unable to read super block");
+       namelen = 14;
+       dirsize = 16;
+       version2 = 0;
        if (MAGIC == MINIX_SUPER_MAGIC) {
-               namelen = 14;
-               dirsize = 16;
-               version2 = 0;
        } else if (MAGIC == MINIX_SUPER_MAGIC2) {
                namelen = 30;
                dirsize = 32;
-               version2 = 0;
 #ifdef CONFIG_FEATURE_MINIX2
        } else if (MAGIC == MINIX2_SUPER_MAGIC) {
-               namelen = 14;
-               dirsize = 16;
                version2 = 1;
        } else if (MAGIC == MINIX2_SUPER_MAGIC2) {
                namelen = 30;
@@ -688,13 +667,20 @@ static void read_tables(void)
        }
        get_dirsize();
        if (show) {
-               printf("%ld inodes\n", INODES);
-               printf("%ld blocks\n", ZONES);
-               printf("Firstdatazone=%ld (%ld)\n", FIRSTZONE, NORM_FIRSTZONE);
-               printf("Zonesize=%d\n", BLOCK_SIZE << ZONESIZE);
-               printf("Maxsize=%ld\n", MAXSIZE);
-               printf("Filesystem state=%d\n", Super.s_state);
-               printf("namelen=%d\n\n", namelen);
+               printf("%ld inodes\n"
+                       "%ld blocks\n"
+                       "Firstdatazone=%ld (%ld)\n"
+                       "Zonesize=%d\n"
+                       "Maxsize=%ld\n"
+                       "Filesystem state=%d\n"
+                       "namelen=%d\n\n",
+                       INODES,
+                       ZONES,
+                       FIRSTZONE, NORM_FIRSTZONE,
+                       BLOCK_SIZE << ZONESIZE,
+                       MAXSIZE,
+                       Super.s_state,
+                       namelen);
        }
 }
 
@@ -738,7 +724,7 @@ static struct minix_inode *get_inode(unsigned int nr)
        } else
                links++;
        if (!++inode_count[nr]) {
-               printf("Warning: inode count too big.\n");
+               printf("Warning: inode count too big\n");
                inode_count[nr]--;
                errors_uncorrected = 1;
        }
@@ -785,7 +771,7 @@ static struct minix2_inode *get_inode2(unsigned int nr)
        } else
                links++;
        if (!++inode_count[nr]) {
-               printf("Warning: inode count too big.\n");
+               printf("Warning: inode count too big\n");
                inode_count[nr]--;
                errors_uncorrected = 1;
        }
@@ -811,7 +797,7 @@ static void check_root2(void)
 }
 #endif
 
-static int add_zone(unsigned short *znr, int *corrected)
+static int add_zone(uint16_t *znr, int *corrected)
 {
        int result;
        int block;
@@ -828,10 +814,9 @@ static int add_zone(unsigned short *znr, int *corrected)
                        *znr = 0;
                        block = 0;
                        *corrected = 1;
+                       return 0;
                }
        }
-       if (!block)
-               return 0;
        if (!zone_in_use(block)) {
                printf("Block %d in file `", block);
                print_current_name();
@@ -845,7 +830,7 @@ static int add_zone(unsigned short *znr, int *corrected)
 }
 
 #ifdef CONFIG_FEATURE_MINIX2
-static int add_zone2(unsigned int *znr, int *corrected)
+static int add_zone2(uint32_t *znr, int *corrected)
 {
        int result;
        int block;
@@ -862,10 +847,9 @@ static int add_zone2(unsigned int *znr, int *corrected)
                        *znr = 0;
                        block = 0;
                        *corrected = 1;
+                       return 0;
                }
        }
-       if (!block)
-               return 0;
        if (!zone_in_use(block)) {
                printf("Block %d in file `", block);
                print_current_name();
@@ -879,7 +863,7 @@ static int add_zone2(unsigned int *znr, int *corrected)
 }
 #endif
 
-static void add_zone_ind(unsigned short *znr, int *corrected)
+static void add_zone_ind(uint16_t *znr, int *corrected)
 {
        static char blk[BLOCK_SIZE];
        int i, chg_blk = 0;
@@ -890,13 +874,13 @@ static void add_zone_ind(unsigned short *znr, int *corrected)
                return;
        read_block(block, blk);
        for (i = 0; i < (BLOCK_SIZE >> 1); i++)
-               add_zone(i + (unsigned short *) blk, &chg_blk);
+               add_zone(i + (uint16_t *) blk, &chg_blk);
        if (chg_blk)
                write_block(block, blk);
 }
 
 #ifdef CONFIG_FEATURE_MINIX2
-static void add_zone_ind2(unsigned int *znr, int *corrected)
+static void add_zone_ind2(uint32_t *znr, int *corrected)
 {
        static char blk[BLOCK_SIZE];
        int i, chg_blk = 0;
@@ -907,13 +891,13 @@ static void add_zone_ind2(unsigned int *znr, int *corrected)
                return;
        read_block(block, blk);
        for (i = 0; i < BLOCK_SIZE >> 2; i++)
-               add_zone2(i + (unsigned int *) blk, &chg_blk);
+               add_zone2(i + (uint32_t *) blk, &chg_blk);
        if (chg_blk)
                write_block(block, blk);
 }
 #endif
 
-static void add_zone_dind(unsigned short *znr, int *corrected)
+static void add_zone_dind(uint16_t *znr, int *corrected)
 {
        static char blk[BLOCK_SIZE];
        int i, blk_chg = 0;
@@ -924,13 +908,13 @@ static void add_zone_dind(unsigned short *znr, int *corrected)
                return;
        read_block(block, blk);
        for (i = 0; i < (BLOCK_SIZE >> 1); i++)
-               add_zone_ind(i + (unsigned short *) blk, &blk_chg);
+               add_zone_ind(i + (uint16_t *) blk, &blk_chg);
        if (blk_chg)
                write_block(block, blk);
 }
 
 #ifdef CONFIG_FEATURE_MINIX2
-static void add_zone_dind2(unsigned int *znr, int *corrected)
+static void add_zone_dind2(uint32_t *znr, int *corrected)
 {
        static char blk[BLOCK_SIZE];
        int i, blk_chg = 0;
@@ -941,12 +925,12 @@ static void add_zone_dind2(unsigned int *znr, int *corrected)
                return;
        read_block(block, blk);
        for (i = 0; i < BLOCK_SIZE >> 2; i++)
-               add_zone_ind2(i + (unsigned int *) blk, &blk_chg);
+               add_zone_ind2(i + (uint32_t *) blk, &blk_chg);
        if (blk_chg)
                write_block(block, blk);
 }
 
-static void add_zone_tind2(unsigned int *znr, int *corrected)
+static void add_zone_tind2(uint32_t *znr, int *corrected)
 {
        static char blk[BLOCK_SIZE];
        int i, blk_chg = 0;
@@ -957,7 +941,7 @@ static void add_zone_tind2(unsigned int *znr, int *corrected)
                return;
        read_block(block, blk);
        for (i = 0; i < BLOCK_SIZE >> 2; i++)
-               add_zone_dind2(i + (unsigned int *) blk, &blk_chg);
+               add_zone_dind2(i + (uint32_t *) blk, &blk_chg);
        if (blk_chg)
                write_block(block, blk);
 }
@@ -1012,13 +996,13 @@ static void check_file(struct minix_inode *dir, unsigned int offset)
        block = map_block(dir, offset / BLOCK_SIZE);
        read_block(block, blk);
        name = blk + (offset % BLOCK_SIZE) + 2;
-       ino = *(unsigned short *) (name - 2);
+       ino = *(uint16_t *) (name - 2);
        if (ino > INODES) {
                print_current_name();
                printf(" contains a bad inode number for file '");
                printf("%.*s'.", namelen, name);
                if (ask(" Remove", 1)) {
-                       *(unsigned short *) (name - 2) = 0;
+                       *(uint16_t *) (name - 2) = 0;
                        write_block(block, blk);
                }
                ino = 0;
@@ -1077,13 +1061,13 @@ static void check_file2(struct minix2_inode *dir, unsigned int offset)
        block = map_block2(dir, offset / BLOCK_SIZE);
        read_block(block, blk);
        name = blk + (offset % BLOCK_SIZE) + 2;
-       ino = *(unsigned short *) (name - 2);
+       ino = *(uint16_t *) (name - 2);
        if (ino > INODES) {
                print_current_name();
                printf(" contains a bad inode number for file '");
                printf("%.*s'.", namelen, name);
                if (ask(" Remove", 1)) {
-                       *(unsigned short *) (name - 2) = 0;
+                       *(uint16_t *) (name - 2) = 0;
                        write_block(block, blk);
                }
                ino = 0;
@@ -1179,7 +1163,7 @@ static void check_counts(void)
        int i;
 
        for (i = 1; i <= INODES; i++) {
-               if (!inode_in_use(i) && Inode[i].i_mode && warn_mode) {
+               if (warn_mode && Inode[i].i_mode && !inode_in_use(i)) {
                        printf("Inode %d mode not cleared.", i);
                        if (ask("Clear", 1)) {
                                Inode[i].i_mode = 0;
@@ -1230,7 +1214,7 @@ static void check_counts2(void)
        int i;
 
        for (i = 1; i <= INODES; i++) {
-               if (!inode_in_use(i) && Inode2[i].i_mode && warn_mode) {
+               if (warn_mode && Inode2[i].i_mode && !inode_in_use(i)) {
                        printf("Inode %d mode not cleared.", i);
                        if (ask("Clear", 1)) {
                                Inode2[i].i_mode = 0;
@@ -1305,7 +1289,7 @@ static void alloc_name_list(void)
 
        name_list = xmalloc(sizeof(char *) * MAX_DEPTH);
        for (i = 0; i < MAX_DEPTH; i++)
-               name_list[i] = xmalloc(sizeof(char) * BUFSIZ + 1);
+               name_list[i] = xmalloc(sizeof(char) * (BUFSIZ + 1));
 }
 
 #ifdef CONFIG_FEATURE_CLEAN_UP
@@ -1327,7 +1311,6 @@ static void free_name_list(void)
 int fsck_minix_main(int argc, char **argv)
 {
        struct termios tmp;
-       int count;
        int retcode = 0;
 
        alloc_name_list();
@@ -1389,11 +1372,10 @@ int fsck_minix_main(int argc, char **argv)
        }
        IN = open(device_name, repair ? O_RDWR : O_RDONLY);
        if (IN < 0){
-               fprintf(stderr,"unable to open device '%s'.\n",device_name);
+               fprintf(stderr,"unable to open device '%s'\n",device_name);
                leave(8);
        }
-       for (count = 0; count < 3; count++)
-               sync();
+       sync(); /* paranoia? */
        read_superblock();
 
        /*
@@ -1406,12 +1388,12 @@ int fsck_minix_main(int argc, char **argv)
        if (!(Super.s_state & MINIX_ERROR_FS) &&
                (Super.s_state & MINIX_VALID_FS) && !force) {
                if (repair)
-                       printf("%s is clean, no check.\n", device_name);
+                       printf("%s is clean, no check\n", device_name);
                return retcode;
        } else if (force)
-               printf("Forcing filesystem check on %s.\n", device_name);
+               printf("Forcing filesystem check on %s\n", device_name);
        else if (repair)
-               printf("Filesystem on %s is dirty, needs checking.\n",
+               printf("Filesystem on %s is dirty, needs checking\n",
                           device_name);
 
        read_tables();
@@ -1463,8 +1445,7 @@ int fsck_minix_main(int argc, char **argv)
                printf("----------------------------\n"
                           "FILE SYSTEM HAS BEEN CHANGED\n"
                           "----------------------------\n");
-               for (count = 0; count < 3; count++)
-                       sync();
+               sync();
        } else if (repair)
                write_super_block();