summaryrefslogtreecommitdiff
path: root/fs/ext2.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/ext2.c')
-rw-r--r--fs/ext2.c29
1 files changed, 15 insertions, 14 deletions
diff --git a/fs/ext2.c b/fs/ext2.c
index 9b41d6c..b58b6a4 100644
--- a/fs/ext2.c
+++ b/fs/ext2.c
@@ -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;