* 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):

bochsout.txt check.txt  extlinux  extlinux.conf  extlinux.sys  git.book  hdt.c32

extlinux.conf  hdt.c32

bochsout.txt  hdt


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.