Kernel/syscalls - Added syscall for Time_Wait
[tpg/acess2.git] / KernelLand / Kernel / syscalls.c
index 635f69a..85fbbf8 100644 (file)
@@ -72,6 +72,10 @@ void SyscallHandler(tSyscallRegs *Regs)
        
        // -- Put the current thread to sleep
        case SYS_SLEEP: Threads_Sleep();        break;
+
+       case SYS_TIMEDSLEEP:
+               Time_Delay(Regs->Arg1);
+               break;
        
        // -- Yield current timeslice
        case SYS_YIELD: Threads_Yield();        break;
@@ -208,12 +212,27 @@ void SyscallHandler(tSyscallRegs *Regs)
                LOG("VFS_Open(\"%s\", 0x%x)", (char*)Regs->Arg1, Regs->Arg2 | VFS_OPENFLAG_USER);
                ret = VFS_Open((char*)Regs->Arg1, Regs->Arg2 | VFS_OPENFLAG_USER);
                break;
+       case SYS_REOPEN:
+               CHECK_STR_NONULL( (char*)Regs->Arg2 );
+               LOG("VFS_Reopen(%i, \"%s\", 0x%x)", Regs->Arg1, (char*)Regs->Arg2, Regs->Arg3 | VFS_OPENFLAG_USER);
+               ret = VFS_Reopen(Regs->Arg1, (char*)Regs->Arg2, Regs->Arg3 | VFS_OPENFLAG_USER);
+               break;
        
        case SYS_CLOSE:
                LOG("VFS_Close(%i)", Regs->Arg1);
                VFS_Close( Regs->Arg1 );
                break;
        
+       case SYS_COPYFD:
+               LOG("VFS_DuplicateFD(%i,%i)", Regs->Arg1, Regs->Arg2);
+               ret = VFS_DuplicateFD(Regs->Arg1, Regs->Arg2);
+               break;
+
+       case SYS_FDCTL:
+               LOG("VFS_SetFDFlags(%i,0%o,0%o)", Regs->Arg1, Regs->Arg2, Regs->Arg3);
+               ret = VFS_SetFDFlags(Regs->Arg1, Regs->Arg2, Regs->Arg3);
+               break;
+
        case SYS_SEEK:
                #if BITS == 64
                ret = VFS_Seek( Regs->Arg1, Regs->Arg2, Regs->Arg3 );
@@ -300,14 +319,10 @@ void SyscallHandler(tSyscallRegs *Regs)
                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;
-                       }
+                       CHECK_STR_NONULL((char*)Regs->Arg1);
+                       CHECK_STR_NONULL((char*)Regs->Arg2);
+                       CHECK_STR_NULLOK((char*)Regs->Arg3);
+                       CHECK_STR_NONULL((char*)Regs->Arg4);
                        ret = VFS_Mount(
                                (char*)Regs->Arg1,      // Device
                                (char*)Regs->Arg2,      // Mount point
@@ -340,7 +355,17 @@ void SyscallHandler(tSyscallRegs *Regs)
                        0       // User handles
                        );
                break;
+
+       
+       // Create a directory
+       case SYS_MKDIR:
+               CHECK_STR_NONULL( (char*)Regs->Arg1 );
+               ret = VFS_MkDir( (char*)Regs->Arg1 );
+               break;
        
+       case SYS_UNLINK:
+               Log_Error("Syscalls", "TODO: Impliment SYS_UNLINK");
+               // Fall
        // -- Debug
        //#if DEBUG_BUILD
        case SYS_DEBUG:

UCC git Repository :: git.ucc.asn.au