X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Fsyscalls.c;h=b0329836d6e8447f3e1438233d936dc561fdc589;hb=ad2ec62655e1d6eb8f2b4a4684eb5d7952aea0fb;hp=f930cdd4a33c93b74c9746239e6d6fcf26a32daf;hpb=9d85201216cb35e1b1e051b1d7cdc38eaa5befa4;p=tpg%2Facess2.git diff --git a/Kernel/syscalls.c b/Kernel/syscalls.c index f930cdd4..b0329836 100644 --- a/Kernel/syscalls.c +++ b/Kernel/syscalls.c @@ -8,6 +8,7 @@ #include #include #include +#include #define CHECK_NUM_NULLOK(v,size) \ if((v)&&!Syscall_Valid((size),(Uint)(v))){ret=-1;err=-EINVAL;break;} @@ -301,6 +302,29 @@ void SyscallHandler(tSyscallRegs *Regs) (char*)Regs->Arg4 // Options ); break; + + // Wait on a set of handles + case SYS_SELECT: + // Sanity checks + if( (Regs->Arg2 && !Syscall_Valid(sizeof(fd_set), Regs->Arg2)) + || (Regs->Arg3 && !Syscall_Valid(sizeof(fd_set), Regs->Arg3)) + || (Regs->Arg4 && !Syscall_Valid(sizeof(fd_set), Regs->Arg4)) + || (Regs->Arg5 && !Syscall_Valid(sizeof(tTime), Regs->Arg5)) ) + { + err = -EINVAL; + ret = -1; + break; + } + // Perform the call + ret = VFS_Select( + Regs->Arg1, // Max handle + (fd_set *)Regs->Arg2, // Read + (fd_set *)Regs->Arg3, // Write + (fd_set *)Regs->Arg4, // Errors + (tTime *)Regs->Arg5, // Timeout + 0 // User handles + ); + break; // -- Debug //#if DEBUG_BUILD