X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;ds=sidebyside;f=AcessNative%2Facesskernel_src%2Fmain.c;h=be03fe61de177410ecb3a7822eef684bdada3908;hb=336ba8b200f6ca1d5d25f09a9d7ddac2e59b26d9;hp=8f03f9a4639937309e55cd0c54ed8ff3ec365703;hpb=5e2eec749173135a9639e5732f229e002c0b02d0;p=tpg%2Facess2.git diff --git a/AcessNative/acesskernel_src/main.c b/AcessNative/acesskernel_src/main.c index 8f03f9a4..be03fe61 100644 --- a/AcessNative/acesskernel_src/main.c +++ b/AcessNative/acesskernel_src/main.c @@ -13,6 +13,7 @@ #endif #include #include +#include "../../KernelLand/Kernel/include/logdebug.h" #define VALGRIND_CLIENT 0 @@ -20,14 +21,18 @@ extern int UI_Initialise(int Width, int Height); extern void UI_MainLoop(void); extern int VFS_Init(void); +extern int PTY_Install(char **Arguments); extern int Video_Install(char **Arguments); extern int NativeKeyboard_Install(char **Arguments); extern int NativeFS_Install(char **Arguments); extern void Debug_SetKTerminal(char *Path); extern int VT_Install(char **Arguments); +extern int Mouse_Install(char **Arguments); +extern int IPCPipe_Install(char **Arguments); extern int VFS_Mount(const char *Device, const char *MountPoint, const char *Filesystem, const char *Options); extern int VFS_MkDir(const char *Path); extern int SyscallServer(void); +extern int Server_Shutdown(void); extern const char gsKernelVersion[]; extern const char gsGitHash[]; extern int giBuildNumber; @@ -36,6 +41,19 @@ extern int giBuildNumber; const char *gsAcessDir = "../Usermode/Output/x86_64"; // === CODE === +#ifndef __WIN32__ +#define P_NOWAIT 0 +int spawnv(int flags, const char *execuable, char * const argv[]) +{ + int pid = fork(); + if( pid != 0 ) return pid; + + execv(execuable, argv); + perror("spawnv - execve"); + for(;;); +} +#endif + int main(int argc, char *argv[]) { char **rootapp = NULL; @@ -65,7 +83,9 @@ int main(int argc, char *argv[]) UI_Initialise(800, 480); // - Ignore SIGUSR1 (used to wake threads) + #ifdef SIGUSR1 signal(SIGUSR1, SIG_IGN); + #endif // Initialise VFS VFS_Init(); @@ -77,6 +97,9 @@ int main(int argc, char *argv[]) Log_Error("Init", "Unable to load NativeKeyboard"); } NativeFS_Install(NULL); + Mouse_Install(NULL); + IPCPipe_Install(NULL); + PTY_Install(NULL); // - Start VTerm { char *args[] = { @@ -90,7 +113,7 @@ int main(int argc, char *argv[]) VFS_MkDir("/Acess"); VFS_Mount(gsAcessDir, "/Acess", "nativefs", ""); - Debug_SetKTerminal("/Devices/VTerm/8"); + Debug_SetKTerminal("/Devices/pts/vt7c"); // Start syscall server SyscallServer(); @@ -100,7 +123,7 @@ int main(int argc, char *argv[]) { int pid; int argcount = 0; - char *args[7+rootapp_argc+1+1]; + const char *args[7+rootapp_argc+1+1]; #if VALGRIND_CLIENT args[argcount++] = "valgrind"; @@ -112,23 +135,11 @@ int main(int argc, char *argv[]) for( i = 0; i < rootapp_argc; i ++ ) args[argcount+i] = rootapp[i]; args[argcount+rootapp_argc] = NULL; - - pid = fork(); + pid = spawnv(P_NOWAIT, "./ld-acess", args); if(pid < 0) { perror("Starting root application [fork(2)]"); return 1; } - if(pid == 0) - { - #ifdef __LINUX__ - prctl(PR_SET_PDEATHSIG, SIGHUP); // LINUX ONLY! - #endif - #if VALGRIND_CLIENT - execv("valgrind", args); - #else - execv("./ld-acess", args); - #endif - } printf("Root application running as PID %i\n", pid); } @@ -140,6 +151,7 @@ int main(int argc, char *argv[]) void AcessNative_Exit(void) { // TODO: Close client applications too + Server_Shutdown(); exit(0); }