summaryrefslogtreecommitdiff
path: root/kernel/syscalls.c
diff options
context:
space:
mode:
authorMichal Idziorek <m.i@gmx.at>2014-10-23 08:41:34 +0200
committerMichal Idziorek <m.i@gmx.at>2014-10-23 08:41:34 +0200
commit463736887fbb6439fe5e676f6fd7990adc6bb727 (patch)
tree00dcb1fb5d426d13ef854820a8672470e49530a7 /kernel/syscalls.c
parentfde24d20cd6a7d5fd1f1df71515e377586b91e24 (diff)
added execve syscall
Diffstat (limited to 'kernel/syscalls.c')
-rw-r--r--kernel/syscalls.c46
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;
-}
-
-//