ATA Fixes, Module compilation fixups
[tpg/acess2.git] / Kernel / syscalls.c
index b49b4d6..02b9008 100644 (file)
@@ -26,11 +26,7 @@ extern int   Proc_GetMessage(Uint *Err, Uint *Source, void *Buffer);
 extern int     Proc_Execve(char *File, char **ArgV, char **EnvP);
 extern Uint    Binary_Load(char *file, Uint *entryPoint);
 extern int     Threads_SetName(char *NewName);
-extern int     Threads_GetPID();
-extern int     Threads_GetTID();
-extern tUID    Threads_GetUID();
 extern int     Threads_SetUID(Uint *errno, tUID ID);
-extern tGID    Threads_GetGID();
 extern int     Threads_SetGID(Uint *errno, tGID ID);
 extern int     Threads_SetFaultHandler(Uint Handler);
 
@@ -124,14 +120,18 @@ void SyscallHandler(tSyscallRegs *Regs)
        // -- Check for messages
        case SYS_GETMSG:
                CHECK_NUM_NULLOK(Regs->Arg1, sizeof(Uint));
-               if( Regs->Arg2 && Regs->Arg2 != -1 && !MM_IsUser(Regs->Arg2) )
-               {
+               if( Regs->Arg2 && Regs->Arg2 != -1 && !MM_IsUser(Regs->Arg2) ) {
                        err = -EINVAL;  ret = -1;       break;
                }
                // *Source, *Data
                ret = Proc_GetMessage(&err, (Uint*)Regs->Arg1, (void*)Regs->Arg2);
                break;
        
+       // -- Get the current timestamp
+       case SYS_GETTIME:
+               ret = now();
+               break;
+       
        // -- Set the thread's name
        case SYS_SETNAME:
                CHECK_STR_NONULL(Regs->Arg1);
@@ -141,9 +141,10 @@ void SyscallHandler(tSyscallRegs *Regs)
        // ---
        // Binary Control
        // ---
+       // -- Replace the current process with another
        case SYS_EXECVE:
                CHECK_STR_NONULL(Regs->Arg1);
-               //Log(" Regs = {Arg2: %x, Arg3: %x}", Regs->Arg2, Regs->Arg3);
+               // Check the argument arrays
                {
                         int    i;
                        char    **tmp = (char**)Regs->Arg2;
@@ -170,6 +171,7 @@ void SyscallHandler(tSyscallRegs *Regs)
                // Path, **Argv, **Envp
                ret = Proc_Execve((char*)Regs->Arg1, (char**)Regs->Arg2, (char**)Regs->Arg3);
                break;
+       // -- Load a binary into the current process
        case SYS_LOADBIN:
                if( !Syscall_ValidString(Regs->Arg1)
                ||  !Syscall_Valid(sizeof(Uint), Regs->Arg2) ) {
@@ -198,7 +200,11 @@ void SyscallHandler(tSyscallRegs *Regs)
                break;
        
        case SYS_SEEK:
+               #if BITS == 64
                ret = VFS_Seek( Regs->Arg1, Regs->Arg2, Regs->Arg3 );
+               #else
+               ret = VFS_Seek( Regs->Arg1, Regs->Arg2|(((Uint64)Regs->Arg3)<<32), Regs->Arg4 );
+               #endif
                break;
                
        case SYS_TELL:

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