AcessNative - Changes to allow _compiling_ on windows.
[tpg/acess2.git] / AcessNative / ld-acess_src / syscalls.c
index 7bb3b03..6680186 100644 (file)
@@ -8,6 +8,7 @@
 #include <stdarg.h>
 #include <string.h>
 #include <stddef.h>
+#include <unistd.h>
 #include "request.h"
 
 #define DEBUG(str, x...)       Debug(str, x)
@@ -29,11 +30,13 @@ const char *ReadEntry(tRequestValue *Dest, void *DataDest, void **PtrDest, const
         int    direction = 0;  // 0: Invalid, 1: Out, 2: In, 3: Out
        char    *str;
         int    len;
-       
+
        // Eat whitespace
        while(*ArgTypes && *ArgTypes == ' ')    ArgTypes ++;
        if( *ArgTypes == '\0' ) return ArgTypes;
        
+//     DEBUG("ArgTypes = '%s'", ArgTypes);
+       
        // Get direction
        switch(*ArgTypes)
        {
@@ -105,7 +108,7 @@ const char *ReadEntry(tRequestValue *Dest, void *DataDest, void **PtrDest, const
                break;
        // Data (special handling)
        case 'd':
-               len = va_arg(*Args, int);
+               len = va_arg(*Args, size_t);
                str = va_arg(*Args, char*);
                
                // Save the pointer for later
@@ -113,7 +116,7 @@ const char *ReadEntry(tRequestValue *Dest, void *DataDest, void **PtrDest, const
                
                // Create parameter block
                Dest->Type = ARG_TYPE_DATA;
-               Dest->Length = len;
+               Dest->Length = str ? len : 0;
                Dest->Flags = 0;
                if( direction & 2 )
                        Dest->Flags |= ARG_FLAG_RETURN;
@@ -121,7 +124,7 @@ const char *ReadEntry(tRequestValue *Dest, void *DataDest, void **PtrDest, const
                // Has data?
                if( direction & 1 )
                {
-                       if( DataDest )
+                       if( DataDest && str )
                                memcpy(DataDest, str, len);
                }
                else
@@ -267,7 +270,7 @@ uint64_t _Syscall(int SyscallID, const char *ArgTypes, ...)
        free( req );
        free( retPtrs );
        
-       DEBUG(": %llx", retValue);
+       DEBUG(": %i 0x%llx", SyscallID, retValue);
        
        return retValue;
 }
@@ -314,3 +317,11 @@ uint64_t native_tell(int FD)
 {
        return ftell( gaSyscall_LocalFPs[FD] );
 }
+
+int native_execve(const char *filename, const char *const argv[], const char *const envp[])
+{
+       int ret;
+       ret = execve(filename, argv, envp);
+       perror("native_execve");
+       return ret;
+}

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