summaryrefslogtreecommitdiff
path: root/kernel/syscalls.c
diff options
context:
space:
mode:
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++;