// ext2.cpp // ext2 filesystem driver for HOS // Author: Josh Holtrop // Date: 05/10/05 // Modified: 05/10/05 #define _HOS_CPP_ _HOS_CPP_ extern "C" { #include "display/kout.h" #include "mm/vmm.h" #include "lang/lang.h" } #include "ext2.h" int ext2_init() { vfs_register("ext2", ext2__mount_func); return 0; } FileSystem *ext2__mount_func(device_t dev) { ext2_super_block_t *super = (ext2_super_block_t *) New(ext2_super_block_t); if ( (block_read(DEV_MAJOR(dev), DEV_MINOR(dev), 2, 2, super) < 1024) || (super->s_magic != EXT2_MAGIC) ) { kfree(super); return NULL; } Ext2fs *fs = new Ext2fs(super, dev); kfree(super); return fs; } Ext2fs::Ext2fs(ext2_super_block_t *super, device_t dev) { myDevice = dev; memcpy(&mySuper, super, sizeof(ext2_super_block_t)); mySuperDirty = 0; kprintf("Blocks: %d (%d free), Inodes: %d (%d free) Creator OS:\n", mySuper.s_blocks_count, mySuper.s_free_blocks_count, mySuper.s_inodes_count, mySuper.s_free_inodes_count, mySuper.s_creator_os); } Ext2fs::~Ext2fs() { if (mySuperDirty) block_write(DEV_MAJOR(myDevice), DEV_MINOR(myDevice), 2, 2, &mySuper); }