diff options
Diffstat (limited to 'kernel/syscalls.c')
| -rw-r--r-- | kernel/syscalls.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/kernel/syscalls.c b/kernel/syscalls.c index 3fb813e..4d1c29d 100644 --- a/kernel/syscalls.c +++ b/kernel/syscalls.c @@ -1,6 +1,5 @@ #include "lib/string/string.h" #include "lib/printf/printf.h" -#include "fs/fs.h" #include "fs/ext2.h" #include "kernel.h" #include "driver/vesa.h" @@ -149,10 +148,11 @@ int syscall_read(int file, char *buf, int len) } //TODO: replace with dirent! -int syscall_readdir(const char *name,fs_dirent *dirs,int max) +int syscall_readdir(const char *name,fs_dirent *dirs,int *pos) { - - return fs_readdir(name,dirs,max); + uint32_t inode = ext2_filename_to_inode(VMEM_EXT2_RAMIMAGE,name); + if(inode==0)return 0; + return ext2_read_dir(VMEM_EXT2_RAMIMAGE, inode, dirs, pos); } // for non blocking io? @@ -215,7 +215,7 @@ int copy_args(char **in, char **out) int syscall_execve(char *name, char **argv, char **env,int pid) { - //TODO copy environment to target pages somehow// + fixme("not overwrite yourself?"); int arg_count=0; while(argv[arg_count]!=NULL)arg_count++; @@ -245,10 +245,10 @@ int syscall_execve(char *name, char **argv, char **env,int pid) return -1; // errror loading } - uint32_t *stack=VMEM_USER_STACK_TOP-3*32; - *++stack=argv1; - *++stack=arg_count; - *++stack=env1; + uint32_t *stack=VMEM_USER_STACK_TOP-4*32; + *--stack=argv1; + *--stack=arg_count; + *--stack=env1; task_reset(pid,entry_global,stack,alloc); return 0; |
