Skip to content
Snippets Groups Projects
Commit 6dcdb8d9 authored by James R.'s avatar James R.
Browse files

Move everything to i_system.c

This also simplifies things; SDL isn't initialized in the parent process.
parent 7c383e4a
No related branches found
No related tags found
No related merge requests found
...@@ -125,10 +125,6 @@ ...@@ -125,10 +125,6 @@
#define LOGMESSAGES // write message in log.txt #define LOGMESSAGES // write message in log.txt
#endif #endif
#if (defined (__unix__) && !defined (_MSDOS)) || defined (UNIXCOMMON)
#define NEWSIGNALHANDLER
#endif
#ifdef LOGMESSAGES #ifdef LOGMESSAGES
extern FILE *logstream; extern FILE *logstream;
#endif #endif
......
...@@ -84,10 +84,6 @@ ticcmd_t *I_BaseTiccmd2(void); ...@@ -84,10 +84,6 @@ ticcmd_t *I_BaseTiccmd2(void);
*/ */
void I_Quit(void) FUNCNORETURN; void I_Quit(void) FUNCNORETURN;
/** \brief Print a message and text box about a signal that was raised.
*/
void I_ReportSignal(int num, int coredumped);
typedef enum typedef enum
{ {
EvilForce = -1, EvilForce = -1,
......
...@@ -28,11 +28,6 @@ ...@@ -28,11 +28,6 @@
#include "time.h" // For log timestamps #include "time.h" // For log timestamps
#ifdef NEWSIGNALHANDLER
#include <errno.h>
#include <sys/wait.h>
#endif
#ifdef HAVE_SDL #ifdef HAVE_SDL
#ifdef HAVE_TTF #ifdef HAVE_TTF
...@@ -187,52 +182,6 @@ int main(int argc, char **argv) ...@@ -187,52 +182,6 @@ int main(int argc, char **argv)
MakeCodeWritable(); MakeCodeWritable();
#endif #endif
#ifdef NEWSIGNALHANDLER
switch (fork())
{
case -1:
I_Error(
"Error setting up signal reporting: fork(): %s\n",
strerror(errno)
);
break;
case 0:
break;
default:
{
int status;
int signum;
if (wait(&status) == -1)
{
I_Error(
"Error setting up signal reporting: fork(): %s\n",
strerror(errno)
);
}
else
{
if (WIFSIGNALED (status))
{
signum = WTERMSIG (status);
#ifdef WCOREDUMP
I_ReportSignal(signum, WCOREDUMP (status));
#else
I_ReportSignal(signum, 0);
#endif
status = 128 + signum;
}
else if (WIFEXITED (status))
{
status = WEXITSTATUS (status);
}
I_ShutdownSystem();
exit(status);
}
}
}
#endif/*NEWSIGNALHANDLER*/
// startup SRB2 // startup SRB2
CONS_Printf("Setting up SRB2...\n"); CONS_Printf("Setting up SRB2...\n");
D_SRB2Main(); D_SRB2Main();
......
...@@ -102,6 +102,12 @@ typedef LPVOID (WINAPI *p_MapViewOfFile) (HANDLE, DWORD, DWORD, DWORD, SIZE_T); ...@@ -102,6 +102,12 @@ typedef LPVOID (WINAPI *p_MapViewOfFile) (HANDLE, DWORD, DWORD, DWORD, SIZE_T);
#endif #endif
#endif #endif
#if (defined (__unix__) && !defined (_MSDOS)) || defined (UNIXCOMMON)
#include <errno.h>
#include <sys/wait.h>
#define NEWSIGNALHANDLER
#endif
#ifndef NOMUMBLE #ifndef NOMUMBLE
#ifdef __linux__ // need -lrt #ifdef __linux__ // need -lrt
#include <sys/mman.h> #include <sys/mman.h>
...@@ -229,7 +235,7 @@ SDL_bool framebuffer = SDL_FALSE; ...@@ -229,7 +235,7 @@ SDL_bool framebuffer = SDL_FALSE;
UINT8 keyboard_started = false; UINT8 keyboard_started = false;
void I_ReportSignal(int num, int coredumped) static void I_ReportSignal(int num, int coredumped)
{ {
//static char msg[] = "oh no! back to reality!\r\n"; //static char msg[] = "oh no! back to reality!\r\n";
const char * sigmsg; const char * sigmsg;
...@@ -2160,6 +2166,53 @@ void I_Sleep(void) ...@@ -2160,6 +2166,53 @@ void I_Sleep(void)
SDL_Delay(cv_sleep.value); SDL_Delay(cv_sleep.value);
} }
#ifdef NEWSIGNALHANDLER
static void I_Fork(void)
{
int status;
int signum;
switch (fork())
{
case -1:
I_Error(
"Error setting up signal reporting: fork(): %s\n",
strerror(errno)
);
break;
case 0:
break;
default:
if (wait(&status))
{
I_Error(
"Error setting up signal reporting: fork(): %s\n",
strerror(errno)
);
}
else
{
if (WIFSIGNALED (status))
{
signum = WTERMSIG (status);
#ifdef WCOREDUMP
I_ReportSignal(signum, WCOREDUMP (status));
#else
I_ReportSignal(signum, 0);
#endif
status = 128 + signum;
}
else if (WIFEXITED (status))
{
status = WEXITSTATUS (status);
}
I_ShutdownSystem();
exit(status);
}
}
}
#endif/*NEWSIGNALHANDLER*/
INT32 I_StartupSystem(void) INT32 I_StartupSystem(void)
{ {
SDL_version SDLcompiled; SDL_version SDLcompiled;
...@@ -2167,6 +2220,9 @@ INT32 I_StartupSystem(void) ...@@ -2167,6 +2220,9 @@ INT32 I_StartupSystem(void)
SDL_VERSION(&SDLcompiled) SDL_VERSION(&SDLcompiled)
SDL_GetVersion(&SDLlinked); SDL_GetVersion(&SDLlinked);
I_StartupConsole(); I_StartupConsole();
#ifdef NEWSIGNALHANDLER
I_Fork();
#endif
I_OutputMsg("Compiled for SDL version: %d.%d.%d\n", I_OutputMsg("Compiled for SDL version: %d.%d.%d\n",
SDLcompiled.major, SDLcompiled.minor, SDLcompiled.patch); SDLcompiled.major, SDLcompiled.minor, SDLcompiled.patch);
I_OutputMsg("Linked with SDL version: %d.%d.%d\n", I_OutputMsg("Linked with SDL version: %d.%d.%d\n",
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment