diff --git a/src/sys/include/sys/sysproto.h b/src/sys/include/sys/sysproto.h index 227e0ce..36c0658 100644 --- a/src/sys/include/sys/sysproto.h +++ b/src/sys/include/sys/sysproto.h @@ -78,6 +78,12 @@ char len_l_[PADL_(size_t)]; size_t len; char len_r_[PADR_(size_t)]; char prot_l_[PADL_(int)]; int prot; char prot_r_[PADR_(int)]; }; +struct lseek_args { + char fd_l_[PADL_(int)]; int fd; char fd_r_[PADR_(int)]; + char pad_l_[PADL_(int)]; int pad; char pad_r_[PADR_(int)]; + char offset_l_[PADL_(off_t)]; off_t offset; char offset_r_[PADR_(off_t)]; + char whence_l_[PADL_(int)]; int whence; char whence_r_[PADR_(int)]; + }; @@ -187,6 +193,7 @@ int access(struct thread *td, struct access_args *uap); int fstatfs(struct thread *td, struct fstatfs_args *uap); int mprotect(struct thread *td, struct mprotect_args *uap); +int lseek(struct thread *td, struct lseek_args *uap); #endif diff --git a/src/sys/include/ubixos/syscalls_new.h b/src/sys/include/ubixos/syscalls_new.h index 78aa0c7..f4a291c 100644 --- a/src/sys/include/ubixos/syscalls_new.h +++ b/src/sys/include/ubixos/syscalls_new.h @@ -263,7 +263,7 @@ invalid_call, /** 196 **/ mmap, /** 197 **/ invalid_call, /** 198 **/ - invalid_call, /** 199 **/ + lseek, /** 199 **/ invalid_call, /** 200 **/ invalid_call, /** 201 **/ __sysctl, /** 202 **/ diff --git a/src/sys/kernel/gen_calls.c b/src/sys/kernel/gen_calls.c index c9228ec..ed5b65e 100644 --- a/src/sys/kernel/gen_calls.c +++ b/src/sys/kernel/gen_calls.c @@ -34,6 +34,7 @@ #include #include #include +#include #include #include @@ -190,6 +191,29 @@ return(error); } +int lseek(struct thread *td, struct lseek_args *uap) { + int error = 0x0; + struct file *fd = 0x0; + + getfd(td,&fd,uap->fd); + switch (uap->whence) { + case 2: + K_PANIC("UNHANDLED WHENCE"); + break; + case 1: + fd->fd->offset += uap->offset; + break; + case 0: + fd->fd->offset = uap->offset; + break; + default: + kprintf("offset: [%i], whence: [%i]\n",uap->offset,uap->whence); + break; + } + + return(error); + } + /*** END ***/