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.. --- kernel/syscalls.c | 108 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 107 insertions(+), 1 deletion(-) (limited to 'kernel/syscalls.c') diff --git a/kernel/syscalls.c b/kernel/syscalls.c index b5a581d..1de5d3a 100644 --- a/kernel/syscalls.c +++ b/kernel/syscalls.c @@ -5,11 +5,20 @@ #include "fs/fs.h" #include "fs/ext2.h" #include "kernel/console.h" +#include "kernel/config.h" +#include -// +static int preread; +static int alloc=0x600000; // TODO: implement properly sbrk!!! + int syscall_write(int file, char *buf, int len) { + + #ifdef LOG_SYSCALLS + log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"write(file=%d, buf=0x%08X, len=%d)", file,buf,len); + #endif + // ALL output to stdout for(int i=0;ist_mode = S_IFCHR; + return 0; +} + +int syscall_isatty(int file,int none1,int none2) +{ + #ifdef LOG_SYSCALLS + log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"isatty (file=%d)", file); + #endif + + return 1; +} + +int syscall_lseek(int file,int ptr,int dir) +{ + + #ifdef LOG_SYSCALLS + log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"lseek (file=%d, ptr=%d, dir=%d)", file,ptr,dir); + #endif + + if(dir==0)preread=ptr; + else{ while(1);} + return preread; +} + +caddr_t syscall_sbrk(int incr, int none1, int none2) +{ + #ifdef LOG_SYSCALLS + log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"sbrk (incr=%d)", incr); + #endif + + 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; + */ +} + -- cgit v1.2.3