AcessNative - Fixing bad handling of errors, add run script for ARCH=native
[tpg/acess2.git] / AcessNative / ld-acess_src / request.c
index 2fa481a..690c7f7 100644 (file)
@@ -1,7 +1,11 @@
 /*
+ * AcessNative ld-acess dynamic linker
+ * - By John Hodge (thePowersGang)
+ *
+ * request.c
+ * - IPC interface
  */
-#define DEBUG  1
-
+#define DEBUG  0
 
 #if DEBUG
 # define DEBUG_S       printf
@@ -21,6 +25,7 @@
 # include <unistd.h>
 # include <sys/socket.h>
 # include <netinet/in.h>
+# include <sys/select.h>
 #endif
 #include "request.h"
 #include "../syscalls.h"
@@ -224,12 +229,12 @@ int SendRequest(tRequestHeader *Request, int RequestSize, int ResponseSize)
        // Send it off
        SendData(Request, RequestSize);
 
-       if( Request->CallID == SYS_EXIT )       return 0;
-
        // Wait for a response (no timeout)
        ReadData(Request, sizeof(*Request), 0);
+       
+       size_t  recvbytes = sizeof(*Request);
        // TODO: Sanity
-       size_t  recvbytes = sizeof(*Request), expbytes = Request->MessageLength;
+       size_t  expbytes = Request->MessageLength;
        char    *ptr = (void*)Request->Params;
        while( recvbytes < expbytes )
        {
@@ -243,6 +248,38 @@ int SendRequest(tRequestHeader *Request, int RequestSize, int ResponseSize)
        if( recvbytes > expbytes ) {
                // TODO: Warning
        }
+       
+       #if DEBUG
+       {
+                int    i;
+               char    *data = (char*)&Request->Params[Request->NParams];
+               DEBUG_S(" Reply:");
+               for( i = 0; i < Request->NParams; i ++ )
+               {
+                       switch(Request->Params[i].Type)
+                       {
+                       case ARG_TYPE_INT32:
+                               DEBUG_S(" 0x%08x", *(uint32_t*)data);
+                               data += sizeof(uint32_t);
+                               break;
+                       case ARG_TYPE_INT64:
+                               DEBUG_S(" 0x%016"PRIx64"", *(uint64_t*)data);
+                               data += sizeof(uint64_t);
+                               break;
+                       case ARG_TYPE_STRING:
+                               DEBUG_S(" '%s'", (char*)data);
+                               data += Request->Params[i].Length;
+                               break;
+                       case ARG_TYPE_DATA:
+                               DEBUG_S(" %p:0x%x", (char*)data, Request->Params[i].Length);
+                               if( !(Request->Params[i].Flags & ARG_FLAG_ZEROED) )
+                                       data += Request->Params[i].Length;
+                               break;
+                       }
+               }
+               DEBUG_S("\n");
+       }
+       #endif
        return recvbytes;
 }
 

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