summaryrefslogtreecommitdiff
path: root/kernel/syscalls.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/syscalls.c')
-rw-r--r--kernel/syscalls.c18
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;