AcessNative - Possible fix to ioctl() bugs
[tpg/acess2.git] / AcessNative / ld-acess_src / main.c
index 598055f..80c5b7a 100644 (file)
@@ -7,7 +7,10 @@
 #include <string.h>
 
 // === IMPORTS ===
+extern int     gSocket;
 extern int     giSyscall_ClientID;
+extern void    acess__exit(int Status);
+extern void    Request_Preinit(void);
 
 // === PROTOTYPES ===
 void   CallUser(void *Entry, int argc, char *argv[], char **envp) __attribute__((noreturn));
@@ -21,7 +24,10 @@ int main(int argc, char *argv[], char **envp)
        char    *appPath = NULL;
         int    (*appMain)(int, char *[], char **);
        void    *base;
+        int    rv;
        
+       Request_Preinit();
+
 //      int    syscall_handle = -1;
        
        for( i = 1; i < argc; i ++ )
@@ -30,6 +36,11 @@ int main(int argc, char *argv[], char **envp)
                        giSyscall_ClientID = atoi(argv[++i]);
                        continue ;
                }
+
+               if(strcmp(argv[i], "--socket") == 0) {
+                       gSocket = atoi(argv[++i]);
+                       continue ;
+               }
                
                if(strcmp(argv[i], "--binary") == 0) {
                        appPath = argv[++i];
@@ -72,33 +83,29 @@ int main(int argc, char *argv[], char **envp)
        if( !base )     return 127;
        
        printf("==============================\n");
-       printf("[DEBUG %i] %i %p ", giSyscall_ClientID, appArgc, appArgv);
+       printf("[DEBUG %i] %i ", giSyscall_ClientID, appArgc);
        for(i = 0; i < appArgc; i ++)
                printf("\"%s\" ", appArgv[i]);
        printf("\n");
        printf("[DEBUG %i] appMain = %p\n", giSyscall_ClientID, appMain);
-       #if 0
-       __asm__ __volatile__ (
-               "push %0;\n\t"
-               "push %1;\n\t"
-               "push %2;\n\t"
-               "jmp *%3;\n\t"
-               : : "r" (envp), "r" (appArgv), "r" (appArgc), "r" (appMain) );
-       return -1;
-       #elif 1
-       CallUser(appMain, appArgc, appArgv, envp);
-       #else
-       return appMain(appArgc, appArgv, NULL);
-       #endif
+//     CallUser(appMain, appArgc, appArgv, envp);
+       rv = appMain(appArgc, appArgv, envp);
+       acess__exit(rv);
+       return rv;
 }
 
 void CallUser(void *Entry, int argc, char *argv[], char **envp)
 {
+       #if 0
        __asm__ __volatile__ (
-               "mov %1, %%esp;\n\t"
-               "jmp *%0"
-               : : "r" (Entry), "r" (&argc)
+               "push %3;\n\t"
+               "push %2;\n\t"
+               "push %1;\n\t"
+               "call *%0"
+               : : "r" (Entry), "r" (argc), "r" (argv), "r" (envp)
                );
+       #else
+       #endif
        for(;;);
 }
 

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