/************************************************************************ * This file is updated by the version number, so if you looked at my * last email, then you don't need to check last README version ************************************************************************/ README version 0.8 ================== For now, I finally reached the end of my new plan that ends with isolinux implemented. While, I know iso9660 file system little, so I'm not sure it's perfect. escpially the mangle_name() function; I find that the file name type of iso9660 is quite complicate, and I can't handle it well 'cause I know nothing about iso9600 fs before. And as said by hpa, I rmoved the malloc and free stuff, and made the cache searching more effective(make it search from the recentlly head, means the freshest head). While, I still haven't made cache supported for isolinux, 'cause I find we couldn't cache anything like meta-data(or no meta-data of iso9600 fs) but the sector that stores the data of each component of a pathname. README version 0.7 ================== Finally, I have tested it with FAT16 and FAT32; after the debug, it works well too. But one thing is really wierd. MS detects the FAT filesystem type by the clust number instead of other things that make more sense. So fourcing to format a small disk with FAT32 or FAT12 is not a good thing. If you're under *NIX, just type mkfs.msdos xxx.img; it works:) README version 0.6 ================== FAT filesystem drive added. For now, it can read a file in fat12.img correctly; haven't test with fat16 and fat32(but I will do it later). And I'm thinking to add a fat lib file with some functions to debug fat fs in the user space(since program debugfs just do the work with EXT fs). README version 0.5 ================== Well, we finally made the searchdir() function much more simpler, and it looks quite not that bad now:) README version 0.4 ================== Well, in this version, we made EXT4 supported; it can read a file in an EXT4 file system. README version 0.3 ================== There're only little changes; Make the open_inode() function looks much simpiler by breaking it into more subfunctions, so two new functions introduced, they are: 1) struct ext2_group_desc* get_group_desc(blokc_num); 2) void read_inode(....); then a little more change on making it more C like. README version 0.2 ================== well, thanks for hpa's pointing, I got the fast symlink check work now. And according the last email from hpa, I changed the cache based on block size but not sector size. But for some unknow reason, there would be some wrong when I do what suggested by hpa about the cache buffer allocation: "I would suggest allocating the data buffers for the cache at cache_init() time instead of doing malloc() later. " I debugged it, but nothing found. So I will keep it stay what it orignal was. When I resolved it, I'll do it. well, about that, here's my opoinion: I don't think we should do allocate data at the cache_init(), 'cause, say we have 0x64 buf slots, then we need allocate 0x64K (assume the block size be 1024B) memory; while during the debugging, I found that there are only three slots used for opening two file under boot/extlinux where Syslinux installed. So, we wasted about 0x61K memory. And for another thing, I am considering create a inode cache. although it's not belong that kind of MUST, but even with a small inode cache, It'll be more effective. ( well, I'm not sure about this, becasue I find that with a path, diffrent component has different inode_number, so when opening a little number of files, it would not be effective. ) So, if i'm wrong, please correct me. And last, the following comes from the comment of function getfssec(): "Alought we have made the buffer data based on block size, we use sector for implemention; because reading multiple sectors (then can be multiple blocks) is what the function do. So, let's be based on sectors." So, I don't changed all the things based on block size, just made cache based on block size. and here's the main change of this version: 1) Make fast symlink can be detected. 2) Cache buffer data based on block size. (So introduces some others change) 3) I have totally changed the linsector function. and here's the thing need to do: 1) Make the code more C style, means more structured. 2) Not sure about the buffer data allocation. 3) Make this code more stable, more solid. 4) Add EXT4 support. Well, this is really the last: Sorry to bother and best wishes with you. README version 0.1 ================== This is the ext2fs driver, it's a user program. And great thanks to stefanb for the wonderful idea. I have patched the bin program a.out and the sample ext2 fs image ext2.img, which is just a floppy image. So you can test it. here is the dir tree(output from ls * -R): ________________________________________________________________________________ boot: extlinux boot/extlinux: bochsout.txt check.txt extlinux extlinux.conf extlinux.sys git.book hdt.c32 boot/extlinux/extlinux: extlinux.conf hdt.c32 link: bochsout.txt hdt lost+found: -------------------------------------------------------------------------------- so you can test it as example: [xxxx yy]$ ./a.out ext2.img extlinux.conf it will output the content of file /boot/extlinux/extlinux.conf. the following command will do the same [xxxx yy]$ ./a.out ext2.img /boot/extlinux/extlinux.conf well, it can't handle fast symlink file(because the orignal driver can not handle it either, it can detect the fast symlink right). that;s to say the following code flag = ThisInode.i_file_acl ? 1 : 0; if ( ThisInode.i_blocks == flag ) { /* fast symlink */ } else { /* slow symlink */ } will do not do the right work. And as I don't know how to detect it either, so left it where it orignal was. Any advice or others would be appreciated very much.