diff options
Diffstat (limited to 'kernel/syscalls.c')
| -rw-r--r-- | kernel/syscalls.c | 22 |
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++; |
