X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FModules%2FFilesystems%2FExt2%2Fdir.c;h=3d4d2ad1409e56c1fcb769490f983f3926e158f2;hb=1100f7207b40fef763f353d8a0b4c798253cc2d9;hp=f04a60cf2f9cebb55bc544ed82b9ec202c058167;hpb=7ecaba85e0b0b9f52a2afd811e398dda996424d5;p=tpg%2Facess2.git diff --git a/KernelLand/Modules/Filesystems/Ext2/dir.c b/KernelLand/Modules/Filesystems/Ext2/dir.c index f04a60cf..3d4d2ad1 100644 --- a/KernelLand/Modules/Filesystems/Ext2/dir.c +++ b/KernelLand/Modules/Filesystems/Ext2/dir.c @@ -68,6 +68,12 @@ int Ext2_ReadDir(tVFS_Node *Node, int Pos, char Dest[FILENAME_MAX]) while(Pos -- && size > 0 && size <= inode->i_size) { VFS_ReadAt( disk->FD, Base+ofs, sizeof(tExt2_DirEnt), &dirent); + + if( dirent.rec_len == 0 ) { + size = 0; + break; + } + ofs += dirent.rec_len; size -= dirent.rec_len; entNum ++; @@ -148,6 +154,8 @@ tVFS_Node *Ext2_FindDir(tVFS_Node *Node, const char *Filename, Uint Flags) // If it matches, create a node and return it if(dirent.name_len == filenameLen && strncmp(dirent.name, Filename, filenameLen) == 0) return Ext2_int_CreateNode( disk, dirent.inode ); + if( dirent.rec_len == 0 ) + break; // Increment pointers ofs += dirent.rec_len; size -= dirent.rec_len; @@ -162,6 +170,8 @@ tVFS_Node *Ext2_FindDir(tVFS_Node *Node, const char *Filename, Uint Flags) } ofs = 0; Base = Ext2_int_GetBlockAddr( disk, inode->i_block, block ); + if( Base == 0 ) + break; } }