From 1acde03a7c0f85aca9919e374e3df6cee6f0bd08 Mon Sep 17 00:00:00 2001 From: Michal Idziorek Date: Thu, 20 Nov 2014 04:51:23 +0100 Subject: workin on syscall interface etc.. --- userspace/syscalls.c | 76 +++++++++++++++++----------------------------------- 1 file changed, 25 insertions(+), 51 deletions(-) (limited to 'userspace/syscalls.c') diff --git a/userspace/syscalls.c b/userspace/syscalls.c index b5959eb..7471418 100644 --- a/userspace/syscalls.c +++ b/userspace/syscalls.c @@ -1,20 +1,17 @@ -//printf needs following syscalls: sbrk write close fstat isatty lseek read -// - #include #include #include -#include "../fs/fs.h" +#include "../kernel/syscalls.h" -static int preread; -static int alloc; -easywrite(char *c); +/* +char *__env1[]={0}; +char *__env2[]={"dupa","test"}; +char **environ={__env1,__env2}; +*/ -// init syscalls -void syscalls_init() +void _exit(int ret) { - // TODO dynamic! - alloc=0x300000; +while(1); } // generic syscall interface! @@ -43,85 +40,62 @@ int syscall(int call, int p1, int p2, int p3) return ebx; } -// int close(int file) { - return -1; + return syscall(SYSCALL_CLOSE,file,0,0); } int fstat(int file, struct stat *st) { - st->st_mode = S_IFCHR; - return 0; + return syscall(SYSCALL_FSTAT,file,st,0); } int isatty(int file) { - return 1; + return syscall(SYSCALL_ISATTY,file,0,0); } int lseek(int file, int ptr, int dir) { - if(dir==0)preread=ptr; - else{ puts("other modes unsupported sorry"); while(1);} - return preread; + return syscall(SYSCALL_LSEEK,file,ptr,dir); } int read(int file, char *ptr, int len) { - return syscall(62,file,ptr,len); + + return syscall(SYSCALL_READ,file,ptr,len); } int readdir(const char *name,fs_dirent *dirs,int max) { - return syscall(63,name,dirs,max); + return syscall(SYSCALL_READDIR,name,dirs,max); } int open(const char *name, int flags, int mode) { - return name; + return syscall(SYSCALL_OPEN,name,flags,mode); } int write(int file, char *ptr, int len) { - return syscall(61,file,ptr,len); + return syscall(SYSCALL_WRITE,file,ptr,len); } int execve(char *name, char **argv, char **env) { - - return syscall(64,name,argv,env); + return syscall(SYSCALL_EXECVE,name,argv,env); } - caddr_t sbrk(int incr) { -// easywrite("syscall: sbrk!!\n"); - int oldalloc=alloc; - alloc+=incr; - return oldalloc; - /* - - extern char end; -// char _end; - static char *heap_end; - char *prev_heap_end; - - if (heap_end == 0) { - heap_end = &end; - } - prev_heap_end = heap_end; - - if (heap_end + incr > stack_ptr) { - write (1, "Heap and stack collision\n", 25); - abort (); - } - - heap_end += incr; - return (caddr_t) prev_heap_end; - */ + static int alloc=0x300000; // TODO: implement properly sbrk!!! + int oldalloc=alloc; + alloc+=incr; + return oldalloc; + + return syscall(SYSCALL_SBRK,incr,0,0); } -// + -- cgit v1.2.3