diff options
Diffstat (limited to 'fs/ext2.c')
| -rw-r--r-- | fs/ext2.c | 29 |
1 files changed, 15 insertions, 14 deletions
@@ -11,7 +11,7 @@ #include "lib/string/string.h" -#include "interface/fs.h" +#include <sys/dirent.h> // THE SUPERBLOCK typedef struct ext2_superblock_struct @@ -226,26 +226,27 @@ static uint32_t ext2_filename_to_inode_traverse(uint32_t ext2_start_addr, char * uint32_t pos=0; while(1) { - fs_dirent dirs; + struct dirent dirs; uint32_t ret=ext2_read_dir(VMEM_EXT2_RAMIMAGE,inode_start, &dirs,&pos); if(!ret)break; - if(strlen(dirs.name)==len && !strcmp_l(first,dirs.name,len)) + if(strlen(dirs.d_name)==len && !strcmp_l(first,dirs.d_name,len)) { - klog("found inode %d %s%s (in inode %d)",dirs.inode,dirs.name,dirs.type==FS_FILE_TYPE_DIR?"/ ":" ",inode_start); - if(final)return dirs.inode; - return ext2_filename_to_inode_traverse(ext2_start_addr,&path[len]+1,dirs.inode); +// klog("found inode %d %s%s (in inode %d)",dirs.d_ino,dirs.d_name,dirs.type==FS_FILE_TYPE_DIR?"/ ":" ",inode_start); + if(final)return dirs.d_ino; + return ext2_filename_to_inode_traverse(ext2_start_addr,&path[len]+1,dirs.d_ino); } } - klog("file not found! : %s",path); return 0; } uint32_t ext2_filename_to_inode(uint32_t ext2_start_addr, char *path) { if(!strcmp_l(path,"/",0))return 2; // root is inode 2 by definition - return ext2_filename_to_inode_traverse(ext2_start_addr,path,2); + uint32_t ret= ext2_filename_to_inode_traverse(ext2_start_addr,path,2); + if(ret==0)klog("file not found! : %s",path); + return ret; } uint32_t ext2_read_inode(uint32_t ext2_start_addr, int inode_nr, char *buf, uint32_t *pos, uint32_t max_size) @@ -273,7 +274,7 @@ uint32_t ext2_read_inode(uint32_t ext2_start_addr, int inode_nr, char *buf, uint return count; } -int ext2_read_dir(uint32_t ext2_start_addr, int inode_nr, fs_dirent *dirs, uint32_t *pos) +int ext2_read_dir(uint32_t ext2_start_addr, int inode_nr, struct dirent *dirs, uint32_t *pos) { ext2_superblock *super=ext2_check(ext2_start_addr); ext2_inode *inode=ext2_get_inode(ext2_start_addr,inode_nr); @@ -293,10 +294,10 @@ int ext2_read_dir(uint32_t ext2_start_addr, int inode_nr, fs_dirent *dirs, uint3 dirs->type=FS_FILE_TYPE_FILE; ext2_inode *inode_current=ext2_get_inode(ext2_start_addr,dir->inode); if(inode_current->permissions&0x4000)dirs->type=FS_FILE_TYPE_DIR; - memcpy(dirs->name,ptr+8,dir->name_length_low); - if(dir->name_length_low>255)dirs->name[255]=0; - dirs->name[dir->name_length_low]=0; // null temrinate - dirs->inode=dir->inode; + memcpy(dirs->d_name,ptr+8,dir->name_length_low); + if(dir->name_length_low>255)dirs->d_name[255]=0; + dirs->d_name[dir->name_length_low]=0; // null temrinate + dirs->d_ino=dir->inode; *pos+=dir->size; return 1; @@ -314,7 +315,7 @@ fd ext2_mount_file_open(mount *m,char *path) return fd_from_path(path); } -int ext2_mount_read_dir(mount *m,char *path, fs_dirent *dirs, uint32_t *pos) +int ext2_mount_read_dir(mount *m,char *path, struct dirent *dirs, uint32_t *pos) { uint32_t inode= ext2_filename_to_inode(VMEM_EXT2_RAMIMAGE,path); if(inode==0)return -1; |
