/*
* mkfs.c - make a linux (minix) file-system.
*
- * (C) 1991 Linus Torvalds. This file may be redistributed as per
- * the Linux copyright.
+ * (C) 1991 Linus Torvalds.
+ *
+ * Licensed under GPLv2, see file LICENSE in this tarball for details.
*/
/*
enum { version2 = 0 };
#endif
-struct globals {
- int dev_fd;
+enum { dev_fd = 3 };
+struct globals {
#if ENABLE_FEATURE_MINIX2
smallint version2;
#define version2 G.version2
unsigned currently_testing;
char root_block[BLOCK_SIZE];
- char super_block_buffer[BLOCK_SIZE];
+ char superblock_buffer[BLOCK_SIZE];
char boot_block_buffer[512];
unsigned short good_blocks_table[MAX_GOOD_BLOCKS];
/* check_blocks(): buffer[] was the biggest static in entire bbox */
#define INODE_BUF1 (((struct minix1_inode*)G.inode_buffer) - 1)
#define INODE_BUF2 (((struct minix2_inode*)G.inode_buffer) - 1)
-#define SB (*(struct minix_super_block*)G.super_block_buffer)
+#define SB (*(struct minix_superblock*)G.superblock_buffer)
#define SB_INODES (SB.s_ninodes)
#define SB_IMAPS (SB.s_imap_blocks)
static int minix_bit(const char* a, unsigned i)
{
- return a[i >> 3] & (1<<(i & 7));
+ return a[i >> 3] & (1<<(i & 7));
}
static void minix_setbit(char *a, unsigned i)
static void write_tables(void)
{
- /* Mark the super block valid. */
+ /* Mark the superblock valid. */
SB.s_state |= MINIX_VALID_FS;
SB.s_state &= ~MINIX_ERROR_FS;
msg_eol = "seek to 0 failed";
- xlseek(G.dev_fd, 0, SEEK_SET);
+ xlseek(dev_fd, 0, SEEK_SET);
msg_eol = "cannot clear boot sector";
- xwrite(G.dev_fd, G.boot_block_buffer, 512);
+ xwrite(dev_fd, G.boot_block_buffer, 512);
msg_eol = "seek to BLOCK_SIZE failed";
- xlseek(G.dev_fd, BLOCK_SIZE, SEEK_SET);
+ xlseek(dev_fd, BLOCK_SIZE, SEEK_SET);
msg_eol = "cannot write superblock";
- xwrite(G.dev_fd, G.super_block_buffer, BLOCK_SIZE);
+ xwrite(dev_fd, G.superblock_buffer, BLOCK_SIZE);
msg_eol = "cannot write inode map";
- xwrite(G.dev_fd, G.inode_map, SB_IMAPS * BLOCK_SIZE);
+ xwrite(dev_fd, G.inode_map, SB_IMAPS * BLOCK_SIZE);
msg_eol = "cannot write zone map";
- xwrite(G.dev_fd, G.zone_map, SB_ZMAPS * BLOCK_SIZE);
+ xwrite(dev_fd, G.zone_map, SB_ZMAPS * BLOCK_SIZE);
msg_eol = "cannot write inodes";
- xwrite(G.dev_fd, G.inode_buffer, INODE_BUFFER_SIZE);
+ xwrite(dev_fd, G.inode_buffer, INODE_BUFFER_SIZE);
msg_eol = "\n";
}
static void write_block(int blk, char *buffer)
{
- xlseek(G.dev_fd, blk * BLOCK_SIZE, SEEK_SET);
- xwrite(G.dev_fd, buffer, BLOCK_SIZE);
+ xlseek(dev_fd, blk * BLOCK_SIZE, SEEK_SET);
+ xwrite(dev_fd, buffer, BLOCK_SIZE);
}
static int get_free_block(void)
/* Seek to the correct loc. */
msg_eol = "seek failed during testing of blocks";
- xlseek(G.dev_fd, current_block * BLOCK_SIZE, SEEK_SET);
+ xlseek(dev_fd, current_block * BLOCK_SIZE, SEEK_SET);
msg_eol = "\n";
/* Try the read */
- got = read(G.dev_fd, buffer, try * BLOCK_SIZE);
+ got = read(dev_fd, buffer, try * BLOCK_SIZE);
if (got < 0)
got = 0;
try = ((size_t)got) / BLOCK_SIZE;
return try;
}
-static void alarm_intr(int alnum ATTRIBUTE_UNUSED)
+static void alarm_intr(int alnum UNUSED_PARAM)
{
if (G.currently_testing >= SB_ZONES)
return;
alarm(5);
while (G.currently_testing < SB_ZONES) {
msg_eol = "seek failed in check_blocks";
- xlseek(G.dev_fd, G.currently_testing * BLOCK_SIZE, SEEK_SET);
+ xlseek(dev_fd, G.currently_testing * BLOCK_SIZE, SEEK_SET);
msg_eol = "\n";
try = TEST_BUFFER_BLOCKS;
if (G.currently_testing + try > SB_ZONES)
FILE *listfile;
unsigned long blockno;
- listfile = xfopen(filename, "r");
+ listfile = xfopen_for_read(filename);
while (!feof(listfile)) {
fscanf(listfile, "%ld\n", &blockno);
mark_zone(blockno);
unsigned sb_zmaps;
unsigned i;
- /* memset(G.super_block_buffer, 0, BLOCK_SIZE); */
+ /* memset(G.superblock_buffer, 0, BLOCK_SIZE); */
/* memset(G.boot_block_buffer, 0, 512); */
SB_MAGIC = G.magic;
SB_ZONE_SIZE = 0;
}
int mkfs_minix_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
-int mkfs_minix_main(int argc ATTRIBUTE_UNUSED, char **argv)
+int mkfs_minix_main(int argc UNUSED_PARAM, char **argv)
{
struct mntent *mp;
unsigned opt;
"refusing to make a filesystem",
G.device_name, mp->mnt_dir);
- G.dev_fd = xopen(G.device_name, O_RDWR);
- if (fstat(G.dev_fd, &statbuf) < 0)
+ xmove_fd(xopen(G.device_name, O_RDWR), dev_fd);
+ if (fstat(dev_fd, &statbuf) < 0)
bb_error_msg_and_die("cannot stat %s", G.device_name);
if (!S_ISBLK(statbuf.st_mode))
opt &= ~1; // clear -c (check)