Skip to content
This repository has been archived by the owner. It is now read-only.
Permalink
Browse files

SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.

  • Loading branch information
slouken committed Jul 10, 2006
1 parent 38ab2fa commit 466d3a402970e1ffe989ce2a075926d4880f0d82

File 56 of 693 in 466d3a4

@@ -35,100 +35,106 @@
the program crashes.
*/

static void SDL_Parachute(int sig)
static void
SDL_Parachute(int sig)
{
signal(sig, SIG_DFL);
SDL_Quit();
raise(sig);
signal(sig, SIG_DFL);
SDL_Quit();
raise(sig);
}

static int SDL_fatal_signals[] = {
SIGSEGV,
SIGSEGV,
#ifdef SIGBUS
SIGBUS,
SIGBUS,
#endif
#ifdef SIGFPE
SIGFPE,
SIGFPE,
#endif
#ifdef SIGQUIT
SIGQUIT,
SIGQUIT,
#endif
0
0
};

void SDL_InstallParachute(void)
void
SDL_InstallParachute(void)
{
/* Set a handler for any fatal signal not already handled */
int i;
/* Set a handler for any fatal signal not already handled */
int i;
#ifdef HAVE_SIGACTION
struct sigaction action;

for ( i=0; SDL_fatal_signals[i]; ++i ) {
sigaction(SDL_fatal_signals[i], NULL, &action);
if ( action.sa_handler == SIG_DFL ) {
action.sa_handler = SDL_Parachute;
sigaction(SDL_fatal_signals[i], &action, NULL);
}
}
struct sigaction action;

for (i = 0; SDL_fatal_signals[i]; ++i) {
sigaction(SDL_fatal_signals[i], NULL, &action);
if (action.sa_handler == SIG_DFL) {
action.sa_handler = SDL_Parachute;
sigaction(SDL_fatal_signals[i], &action, NULL);
}
}
#ifdef SIGALRM
/* Set SIGALRM to be ignored -- necessary on Solaris */
sigaction(SIGALRM, NULL, &action);
if ( action.sa_handler == SIG_DFL ) {
action.sa_handler = SIG_IGN;
sigaction(SIGALRM, &action, NULL);
}
/* Set SIGALRM to be ignored -- necessary on Solaris */
sigaction(SIGALRM, NULL, &action);
if (action.sa_handler == SIG_DFL) {
action.sa_handler = SIG_IGN;
sigaction(SIGALRM, &action, NULL);
}
#endif
#else
void (*ohandler)(int);

for ( i=0; SDL_fatal_signals[i]; ++i ) {
ohandler = signal(SDL_fatal_signals[i], SDL_Parachute);
if ( ohandler != SIG_DFL ) {
signal(SDL_fatal_signals[i], ohandler);
}
}
void (*ohandler) (int);

for (i = 0; SDL_fatal_signals[i]; ++i) {
ohandler = signal(SDL_fatal_signals[i], SDL_Parachute);
if (ohandler != SIG_DFL) {
signal(SDL_fatal_signals[i], ohandler);
}
}
#endif /* HAVE_SIGACTION */
return;
return;
}

void SDL_UninstallParachute(void)
void
SDL_UninstallParachute(void)
{
/* Remove a handler for any fatal signal handled */
int i;
/* Remove a handler for any fatal signal handled */
int i;
#ifdef HAVE_SIGACTION
struct sigaction action;

for ( i=0; SDL_fatal_signals[i]; ++i ) {
sigaction(SDL_fatal_signals[i], NULL, &action);
if ( action.sa_handler == SDL_Parachute ) {
action.sa_handler = SIG_DFL;
sigaction(SDL_fatal_signals[i], &action, NULL);
}
}
struct sigaction action;

for (i = 0; SDL_fatal_signals[i]; ++i) {
sigaction(SDL_fatal_signals[i], NULL, &action);
if (action.sa_handler == SDL_Parachute) {
action.sa_handler = SIG_DFL;
sigaction(SDL_fatal_signals[i], &action, NULL);
}
}
#else
void (*ohandler)(int);

for ( i=0; SDL_fatal_signals[i]; ++i ) {
ohandler = signal(SDL_fatal_signals[i], SIG_DFL);
if ( ohandler != SDL_Parachute ) {
signal(SDL_fatal_signals[i], ohandler);
}
}
void (*ohandler) (int);

for (i = 0; SDL_fatal_signals[i]; ++i) {
ohandler = signal(SDL_fatal_signals[i], SIG_DFL);
if (ohandler != SDL_Parachute) {
signal(SDL_fatal_signals[i], ohandler);
}
}
#endif /* HAVE_SIGACTION */
}

#else

/* No signals on this platform, nothing to do.. */

void SDL_InstallParachute(void)
void
SDL_InstallParachute(void)
{
return;
return;
}

void SDL_UninstallParachute(void)
void
SDL_UninstallParachute(void)
{
return;
return;
}

#endif /* HAVE_SIGNAL_H */
/* vi: set ts=4 sw=4 expandtab: */

0 comments on commit 466d3a4

Please sign in to comment.