From 9568d5afcfea1b5a5019c23e25bba33283970f30 Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Mon, 29 Jan 2007 17:44:28 -0500 Subject: mke2fs: Stopping for dinner. It compiles. --- toys/mke2fs.c | 132 +++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 99 insertions(+), 33 deletions(-) diff --git a/toys/mke2fs.c b/toys/mke2fs.c index 6b13dd01..28aea87a 100644 --- a/toys/mke2fs.c +++ b/toys/mke2fs.c @@ -116,41 +116,65 @@ static void init_superblock(struct ext2_superblock *sb) sb->state = sb->errors = SWAP_LE16(1); sb->rev_level = SWAP_LE32(1); + sb->first_ino = SWAP_LE32(11); // First 10 reserved for special uses. sb->inode_size = SWAP_LE16(sizeof(struct ext2_inode)); sb->feature_incompat = SWAP_LE32(EXT2_FEATURE_INCOMPAT_FILETYPE); sb->feature_ro_compat = SWAP_LE32(EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER); create_uuid(sb->uuid); - // If we're called as mke3fs or mkfs.ext3, do a journal. + // TODO If we're called as mke3fs or mkfs.ext3, do a journal. //if (strchr(toys.which->name,'3')) // sb->feature_compat = SWAP_LE32(EXT3_FEATURE_COMPAT_HAS_JOURNAL); + + // TODO fill out free_blocks, free_inodes, first_ino } // Number of blocks used in this group by superblock/group list backup. // Returns 0 if this group doesn't have a superblock backup. static int group_superblock_used(uint32_t group) { - int used ; + int used = 0, i; + + // Superblock backups are on groups 0, 1, and powers of 3, 5, and 7. + if(!group || group==1) used++; + for (i=3; i<9; i+=2) { + int j = i; + while (j TT.blocks) { + temp = TT.blocks & (blockbits-1); + bits_set(toybuf, temp, blockbits-temp); + } + xwrite(TT.fsfd, toybuf, TT.blocksize); + + temp = TT.inodes/TT.groups; + + // Write inode bitmap (TODO) + memset(toybuf, 0, TT.blocksize); + if (!i) bits_set(toybuf,0,10); + bits_set(toybuf, temp, blockbits-temp); + xwrite(TT.fsfd, toybuf, TT.blocksize); + + // Write inode table for this group + for (j = 0; j