X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Fsyscalls.c;h=0348d57ada02980199fe27f2a9df79bf9fc79da2;hb=e7809e57b0692cf65ee1a7d2060c52fc53da49f2;hp=d629ae4e8e16fb215b24211cb9921b24355c4990;hpb=bd5e8623e509a443d7d6e1b959b79f85b0c285b7;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/syscalls.c b/KernelLand/Kernel/syscalls.c index d629ae4e..0348d57a 100644 --- a/KernelLand/Kernel/syscalls.c +++ b/KernelLand/Kernel/syscalls.c @@ -275,21 +275,35 @@ void SyscallHandler(tSyscallRegs *Regs) ret = -1; break; } - // Sanity check the paths - if(!Syscall_ValidString((char*)Regs->Arg1) - || !Syscall_ValidString((char*)Regs->Arg2) - || !Syscall_ValidString((char*)Regs->Arg3) - || !Syscall_ValidString((char*)Regs->Arg4) ) { - err = -EINVAL; - ret = -1; - break; + + if( !Regs->Arg1 ) + { + if( !Syscall_ValidString((char*)Regs->Arg2) ) { + err = -EINVAL; + ret = -1; + break; + } + + ret = VFS_Unmount((char*)Regs->Arg2); + } + else + { + // Sanity check the paths + if(!Syscall_ValidString((char*)Regs->Arg1) + || !Syscall_ValidString((char*)Regs->Arg2) + || (Regs->Arg3 && !Syscall_ValidString((char*)Regs->Arg3)) + || !Syscall_ValidString((char*)Regs->Arg4) ) { + err = -EINVAL; + ret = -1; + break; + } + ret = VFS_Mount( + (char*)Regs->Arg1, // Device + (char*)Regs->Arg2, // Mount point + (char*)Regs->Arg3, // Filesystem + (char*)Regs->Arg4 // Options + ); } - ret = VFS_Mount( - (char*)Regs->Arg1, // Device - (char*)Regs->Arg2, // Mount point - (char*)Regs->Arg3, // Filesystem - (char*)Regs->Arg4 // Options - ); break; // Wait on a set of handles