diff options
| author | Michal Idziorek <m.i@gmx.at> | 2014-10-23 08:41:34 +0200 |
|---|---|---|
| committer | Michal Idziorek <m.i@gmx.at> | 2014-10-23 08:41:34 +0200 |
| commit | 463736887fbb6439fe5e676f6fd7990adc6bb727 (patch) | |
| tree | 00dcb1fb5d426d13ef854820a8672470e49530a7 /kernel/syscalls.c | |
| parent | fde24d20cd6a7d5fd1f1df71515e377586b91e24 (diff) | |
added execve syscall
Diffstat (limited to 'kernel/syscalls.c')
| -rw-r--r-- | kernel/syscalls.c | 46 |
1 files changed, 22 insertions, 24 deletions
diff --git a/kernel/syscalls.c b/kernel/syscalls.c index 0fe1542..564a604 100644 --- a/kernel/syscalls.c +++ b/kernel/syscalls.c @@ -6,6 +6,7 @@ // int syscall_write(int file, char *buf, int len) { + // ALL output to stdout for(int i=0;i<len;i++) { PutConsoleChar(buf[i],0b1111111111000000); @@ -16,21 +17,25 @@ int syscall_write(int file, char *buf, int len) int syscall_read(int file, char *buf, int len) { - char c; - - while(1) + // stdin + if(file==1) { - asm("cli"); - bool ret=ringbuffer_get(&c); - asm("sti"); - - if(ret) + + char c; + + while(1) { - *buf=c; - return 1; - } + asm("cli"); + bool ret=ringbuffer_get(&c); + asm("sti"); + + if(ret) + { + *buf=c; + return 1; + } -// if(ret) log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"read kb buffer: %d",c); + } } } @@ -39,19 +44,12 @@ int syscall_readdir(const char *name,fs_dirent *dirs,int max) { return fs_readdir(name,dirs,max); } -// -int example_syscall(int x,int y) +int syscall_execve(char *name, char **argv, char **env) { -// log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"example syscall called with %d + %d",x,y); - return x+y; + ext2_inode_content(0x80800,name,0x100000,0x100000); + // autorun "user-space" prog + asm("push $0x100000"); + asm("ret"); } - -int example_syscall_2(int x,int y) -{ - // log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"example syscall 2 called with %d - %d",x,y); - return x-y; -} - -// |
