summaryrefslogtreecommitdiff
path: root/fs/ext2.c
diff options
context:
space:
mode:
authorMichal Idziorek <m.i@gmx.at>2014-11-23 23:26:26 +0100
committerMichal Idziorek <m.i@gmx.at>2014-11-23 23:26:26 +0100
commitec0ba7bc40854eab6a1cdb41364f41f9c11407e1 (patch)
tree88f3896c70ac32bc1b70dcd7ebddbbe595c6608f /fs/ext2.c
parent50300fa573bf2bc00f9732e812d54ab77cf03dd7 (diff)
foolshell and syscalls improvememets
Diffstat (limited to 'fs/ext2.c')
-rw-r--r--fs/ext2.c48
1 files changed, 46 insertions, 2 deletions
diff --git a/fs/ext2.c b/fs/ext2.c
index 6920b40..4db858f 100644
--- a/fs/ext2.c
+++ b/fs/ext2.c
@@ -3,6 +3,8 @@
#define FOOLOS_MODULE_NAME "ext2"
+#include <stdbool.h>
+
#include "lib/int/stdint.h"
#include "lib/logger/log.h"
#include "fs.h"
@@ -240,11 +242,53 @@ int ext2_inode_content(char *ram,int inode_nr,uint8_t *ramdest,int max)
}
-//TODO!!!
-int ext2_filename_to_inode(char *path)
+int ext2_filename_to_inode_traverse(uint8_t *ram, char *path,int inode_start)
{
+ bool final=false;
+
+ // skip leading slashes
+ while(*path=='/')path++;
+ char *first=path;
+
+ while(*path!='/'&&*path!=0)path++;
+ char *last=path;
+
+ if(*path==0)final=true;
+ else(*path=0);
+
+ log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"looking for %s '%s' in inode: %d",final?"file":"dir",first,inode_start);
+
+ fs_dirent dirs[15];
+ int count= ext2_read_dir(ram, inode_start,dirs,15); // get dir
+
+ for(int i=0;i<count;i++)
+ {
+ if(true==strcmp(first,dirs[i].name,0))
+ {
+ log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"found: %s (%s)",first,dirs[i].type==FS_FILE_TYPE_DIR?"dir":"file");
+ if(final)return dirs[i].inode;
+ return ext2_filename_to_inode_traverse(ram,last+1,dirs[i].inode);
+ }
+ //log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"no match: %s",dirs[i].name);
+ }
+
+ log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"file not found!");
+ return -1;
+
+
+}
+int ext2_filename_to_inode(uint8_t *ram, char *path)
+{
+ char buf[256];
+ for(int i=0;i<256;i++)
+ {
+ buf[i]=path[i];
+ if(buf[i]==0)break;
+ }
+
+ return ext2_filename_to_inode_traverse(ram,buf,2);
}
int ext2_read_dir(uint8_t *ram, int inode_nr,fs_dirent *dirs,int max)