summaryrefslogtreecommitdiff
path: root/kernel/syscalls.c
diff options
context:
space:
mode:
authorMiguel <m.i@gmx.at>2018-09-15 12:25:13 +0200
committerMiguel <m.i@gmx.at>2018-09-15 12:25:13 +0200
commit0b010d22dbf845ad030e2e7320f9c5935b2604a4 (patch)
tree6683b09a89b9e19630ef197343a8ace53a765c82 /kernel/syscalls.c
parentfe7d0332267ef1e62153b685d2b5574ce624a4bc (diff)
brainfuck interpreter works!
Diffstat (limited to 'kernel/syscalls.c')
-rw-r--r--kernel/syscalls.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/kernel/syscalls.c b/kernel/syscalls.c
index 57ebc54..5205bf1 100644
--- a/kernel/syscalls.c
+++ b/kernel/syscalls.c
@@ -109,7 +109,25 @@ int syscall_gettimeofday(struct timeval *tv, struct timezone *tz)
int syscall_lseek(int file,int ptr,int dir)
{
- kpanic("unhandled syscall: lseek");
+
+#ifndef SEEK_SET
+#define SEEK_SET 0 /* set file offset to offset */
+#endif
+#ifndef SEEK_CUR
+#define SEEK_CUR 1 /* set file offset to current plus offset */
+#endif
+#ifndef SEEK_END
+#define SEEK_END 2 /* set file offset to EOF plus offset */
+#endif
+
+ if(dir==SEEK_CUR)
+ {
+ uint32_t *dat=fds[file].data;
+ dat[1]+=ptr;
+ return dat[1];
+ }
+
+ kpanic("not fully handled lseek! dir=%d",dir);
return 0;
}
@@ -312,8 +330,8 @@ int syscall_open(char *name, int flags, int mode)
}
else
{
-
fds[next_fd]=fd_from_path(name);
+ if(*(uint32_t *)fds[next_fd].data==0)return -1;
}
next_fd++;