* 28.02.93 - added support for different directory entry sizes..
*
* Sat Mar 6 18:59:42 1993, faith@cs.unc.edu: Output namelen with
- * super-block information
+ * superblock information
*
* Sat Oct 9 11:17:11 1993, faith@cs.unc.edu: make exit status conform
* to that required by fsutil
* -a for automatic repairs (not implemented)
* -r for repairs (interactive) (not implemented)
* -v for verbose (tells how many files)
- * -s for super-block info
+ * -s for superblock info
* -m for minix-like "mode not cleared" warnings
* -f force filesystem check even if filesystem marked as valid
*
enum { MAX_DEPTH = 32 };
+enum { dev_fd = 3 };
+
struct globals {
- int dev_fd;
#if ENABLE_FEATURE_MINIX2
smallint version2;
#endif
/* Bigger stuff */
struct termios sv_termios;
- char super_block_buffer[BLOCK_SIZE];
+ char superblock_buffer[BLOCK_SIZE];
char add_zone_ind_blk[BLOCK_SIZE];
char add_zone_dind_blk[BLOCK_SIZE];
USE_FEATURE_MINIX2(char add_zone_tind_blk[BLOCK_SIZE];)
};
#define G (*ptr_to_globals)
-#define dev_fd (G.dev_fd )
#if ENABLE_FEATURE_MINIX2
#define version2 (G.version2 )
#endif
#define name_depth (G.name_depth )
#define name_component (G.name_component )
#define sv_termios (G.sv_termios )
-#define super_block_buffer (G.super_block_buffer )
+#define superblock_buffer (G.superblock_buffer )
#define add_zone_ind_blk (G.add_zone_ind_blk )
#define add_zone_dind_blk (G.add_zone_dind_blk )
#define add_zone_tind_blk (G.add_zone_tind_blk )
#define Inode1 (((struct minix1_inode *) inode_buffer)-1)
#define Inode2 (((struct minix2_inode *) inode_buffer)-1)
-#define Super (*(struct minix_super_block *)(super_block_buffer))
+#define Super (*(struct minix_superblock *)(superblock_buffer))
#if ENABLE_FEATURE_MINIX2
# define ZONES ((unsigned)(version2 ? Super.s_zones : Super.s_nzones))
return (size + n-1) / n;
}
-#if ENABLE_FEATURE_MINIX2
-#define INODE_BLOCKS div_roundup(INODES, (version2 ? MINIX2_INODES_PER_BLOCK \
- : MINIX1_INODES_PER_BLOCK))
+#if !ENABLE_FEATURE_MINIX2
+#define INODE_BLOCKS div_roundup(INODES, MINIX1_INODES_PER_BLOCK)
#else
-#define INODE_BLOCKS div_roundup(INODES, MINIX1_INODES_PER_BLOCK)
+#define INODE_BLOCKS div_roundup(INODES, \
+ (version2 ? MINIX2_INODES_PER_BLOCK : MINIX1_INODES_PER_BLOCK))
#endif
-#define INODE_BUFFER_SIZE (INODE_BLOCKS * BLOCK_SIZE)
-#define NORM_FIRSTZONE (2 + IMAPS + ZMAPS + INODE_BLOCKS)
+#define INODE_BUFFER_SIZE (INODE_BLOCKS * BLOCK_SIZE)
+#define NORM_FIRSTZONE (2 + IMAPS + ZMAPS + INODE_BLOCKS)
/* Before you ask "where they come from?": */
/* setbit/clrbit are supplied by sys/param.h */
static void recursive_check2(unsigned ino);
#endif
-static void die(const char *str) ATTRIBUTE_NORETURN;
+static void die(const char *str) NORETURN;
static void die(const char *str)
{
if (termios_set)
struct mntent *mnt;
int cont;
int fd;
-
+//XXX:FIXME use find_mount_point()
f = setmntent(MOUNTED, "r");
if (f == NULL)
return;
cont = ask("Do you really want to continue", 0);
if (!cont) {
printf("Check aborted\n");
- exit(0);
+ exit(EXIT_SUCCESS);
}
}
}
#endif
-static void write_super_block(void)
+static void write_superblock(void)
{
/*
* Set the state of the filesystem based on whether or not there
Super.s_state &= ~MINIX_ERROR_FS;
xlseek(dev_fd, BLOCK_SIZE, SEEK_SET);
- if (BLOCK_SIZE != full_write(dev_fd, super_block_buffer, BLOCK_SIZE))
- die("cannot write super-block");
+ if (BLOCK_SIZE != full_write(dev_fd, superblock_buffer, BLOCK_SIZE))
+ die("cannot write superblock");
}
static void write_tables(void)
{
- write_super_block();
+ write_superblock();
if (IMAPS * BLOCK_SIZE != write(dev_fd, inode_map, IMAPS * BLOCK_SIZE))
die("cannot write inode map");
static void read_superblock(void)
{
xlseek(dev_fd, BLOCK_SIZE, SEEK_SET);
- if (BLOCK_SIZE != full_read(dev_fd, super_block_buffer, BLOCK_SIZE))
- die("cannot read super block");
+ if (BLOCK_SIZE != full_read(dev_fd, superblock_buffer, BLOCK_SIZE))
+ die("cannot read superblock");
/* already initialized to:
namelen = 14;
dirsize = 16;
version2 = 1;
#endif
} else
- die("bad magic number in super-block");
+ die("bad magic number in superblock");
if (ZONESIZE != 0 || BLOCK_SIZE != 1024)
die("only 1k blocks/zones supported");
if (IMAPS * BLOCK_SIZE * 8 < INODES + 1)
- die("bad s_imap_blocks field in super-block");
+ die("bad s_imap_blocks field in superblock");
if (ZMAPS * BLOCK_SIZE * 8 < ZONES - FIRSTZONE + 1)
- die("bad s_zmap_blocks field in super-block");
+ die("bad s_zmap_blocks field in superblock");
}
static void read_tables(void)
#endif
int fsck_minix_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-int fsck_minix_main(int argc ATTRIBUTE_UNUSED, char **argv)
+int fsck_minix_main(int argc UNUSED_PARAM, char **argv)
{
struct termios tmp;
int retcode = 0;
if (!isatty(0) || !isatty(1))
die("need terminal for interactive repairs");
}
- dev_fd = xopen(device_name, OPT_repair ? O_RDWR : O_RDONLY);
+ xmove_fd(xopen(device_name, OPT_repair ? O_RDWR : O_RDONLY), dev_fd);
/*sync(); paranoia? */
read_superblock();
printf("FILE SYSTEM HAS BEEN CHANGED\n");
sync();
} else if (OPT_repair)
- write_super_block();
+ write_superblock();
if (OPT_manual)
tcsetattr(0, TCSANOW, &sv_termios);