#include #include #include #include FILE *f; struct ext2_super_block esb; struct ext2_inode eino; struct ext2_group_desc egroup; long groups; __u32 blocksize; void Halt(char *message) { printf(message); exit(1); } void seekToBlock(__u32 blocknr) { fseek(f,blocknr*blocksize,SEEK_SET); } void readSuperBlock(__u32 base) { fseek(f,base+0x400,SEEK_SET); if (fread(&esb,1,sizeof esb,f) %d groups\n",esb.s_blocks_count,esb.s_blocks_per_group,groups); printf("1 block = %d bytes\n",blocksize); } void readGroup(__u32 base,__u32 grnum) { fseek(f,base+(1+esb.s_first_data_block)*blocksize+grnum*sizeof(egroup),SEEK_SET); if (fread(&egroup,1,sizeof egroup,f)blocksize?blocksize:*len; seekToBlock(blocknr); if (fread(&buffer,1,toread,f)0,i0,i