bc: convert to "G trick" - this returns bc to zero bss increase
[oweals/busybox.git] / util-linux / mkfs_minix.c
index 88d797584cca03aedda8b101734b573621209cd3..69dfcd123593fc9aa3668345e9a32d3bc2e7c1ac 100644 (file)
  * Modified for BusyBox by Erik Andersen <andersen@debian.org> --
  *     removed getopt based parser and added a hand rolled one.
  */
+//config:config MKFS_MINIX
+//config:      bool "mkfs_minix"
+//config:      default y
+//config:      select PLATFORM_LINUX
+//config:      help
+//config:      The minix filesystem is a nice, small, compact, read-write filesystem
+//config:      with little overhead. If you wish to be able to create minix
+//config:      filesystems this utility will do the job for you.
+//config:
+//config:config FEATURE_MINIX2
+//config:      bool "Support Minix fs v2 (fsck_minix/mkfs_minix)"
+//config:      default y
+//config:      depends on FSCK_MINIX || MKFS_MINIX
+//config:      help
+//config:      If you wish to be able to create version 2 minix filesystems, enable
+//config:      this. If you enabled 'mkfs_minix' then you almost certainly want to
+//config:      be using the version 2 filesystem support.
+
+//                     APPLET_ODDNAME:name        main        location     suid_type     help
+//applet:IF_MKFS_MINIX(APPLET_ODDNAME(mkfs.minix, mkfs_minix, BB_DIR_SBIN, BB_SUID_DROP, mkfs_minix))
+
+//kbuild:lib-$(CONFIG_MKFS_MINIX) += mkfs_minix.o
 
 //usage:#define mkfs_minix_trivial_usage
 //usage:       "[-c | -l FILE] [-nXX] [-iXX] BLOCKDEV [KBYTES]"
@@ -120,7 +142,10 @@ struct globals {
        unsigned currently_testing;
 
        char root_block[BLOCK_SIZE];
-       char superblock_buffer[BLOCK_SIZE];
+       union {
+               char superblock_buffer[BLOCK_SIZE];
+               struct minix_superblock SB;
+       } u;
        char boot_block_buffer[512];
        unsigned short good_blocks_table[MAX_GOOD_BLOCKS];
        /* check_blocks(): buffer[] was the biggest static in entire bbox */
@@ -144,7 +169,7 @@ static ALWAYS_INLINE unsigned div_roundup(unsigned size, unsigned n)
 #define INODE_BUF1              (((struct minix1_inode*)G.inode_buffer) - 1)
 #define INODE_BUF2              (((struct minix2_inode*)G.inode_buffer) - 1)
 
-#define SB                      (*(struct minix_superblock*)G.superblock_buffer)
+#define SB                      (G.u.SB)
 
 #define SB_INODES               (SB.s_ninodes)
 #define SB_IMAPS                (SB.s_imap_blocks)
@@ -212,7 +237,7 @@ static void write_tables(void)
        xlseek(dev_fd, BLOCK_SIZE, SEEK_SET);
 
        msg_eol = "can't write superblock";
-       xwrite(dev_fd, G.superblock_buffer, BLOCK_SIZE);
+       xwrite(dev_fd, G.u.superblock_buffer, BLOCK_SIZE);
 
        msg_eol = "can't write inode map";
        xwrite(dev_fd, G.inode_map, SB_IMAPS * BLOCK_SIZE);
@@ -519,7 +544,7 @@ static void setup_tables(void)
        unsigned sb_zmaps;
        unsigned i;
 
-       /* memset(G.superblock_buffer, 0, BLOCK_SIZE); */
+       /* memset(G.u.superblock_buffer, 0, BLOCK_SIZE); */
        /* memset(G.boot_block_buffer, 0, 512); */
        SB_MAGIC = G.magic;
        SB_ZONE_SIZE = 0;
@@ -604,8 +629,7 @@ int mkfs_minix_main(int argc UNUSED_PARAM, char **argv)
                bb_error_msg_and_die("bad inode size");
 #endif
 
-       opt_complementary = "n+"; /* -n N */
-       opt = getopt32(argv, "ci:l:n:v", &str_i, &listfile, &G.namelen);
+       opt = getopt32(argv, "ci:l:n:+v", &str_i, &listfile, &G.namelen);
        argv += optind;
        //if (opt & 1) -c
        if (opt & 2) G.req_nr_inodes = xatoul(str_i); // -i