comparison src/SDL_fatal.c @ 1330:450721ad5436

It's now possible to build SDL without any C runtime at all on Windows, using Visual C++ 2005
author Sam Lantinga <slouken@libsdl.org>
date Mon, 06 Feb 2006 08:28:51 +0000
parents c9b51268668f
children d910939febfa
comparison
equal deleted inserted replaced
1329:bc67bbf87818 1330:450721ad5436
18 18
19 Sam Lantinga 19 Sam Lantinga
20 slouken@libsdl.org 20 slouken@libsdl.org
21 */ 21 */
22 22
23 #ifdef _WIN32_WCE
24 #define NO_SIGNAL_H
25 #endif
26
27 /* General fatal signal handling code for SDL */ 23 /* General fatal signal handling code for SDL */
28 24
29 #ifdef NO_SIGNAL_H 25 #include "SDL_config.h"
30 26
31 /* No signals on this platform, nothing to do.. */ 27 #ifdef HAVE_SIGNAL_H
32 28
33 void SDL_InstallParachute(void)
34 {
35 return;
36 }
37
38 void SDL_UninstallParachute(void)
39 {
40 return;
41 }
42
43 #else
44
45 #include <stdlib.h>
46 #include <stdio.h>
47 #include <signal.h> 29 #include <signal.h>
48 #include <string.h>
49 30
50 #include "SDL.h" 31 #include "SDL.h"
51 #include "SDL_fatal.h" 32 #include "SDL_fatal.h"
52
53 #ifdef __CYGWIN__
54 #define DISABLE_STDIO
55 #endif
56 33
57 /* This installs some signal handlers for the more common fatal signals, 34 /* This installs some signal handlers for the more common fatal signals,
58 so that if the programmer is lazy, the app doesn't die so horribly if 35 so that if the programmer is lazy, the app doesn't die so horribly if
59 the program crashes. 36 the program crashes.
60 */ 37 */
61 38
62 static void print_msg(const char *text)
63 {
64 #ifndef DISABLE_STDIO
65 fprintf(stderr, "%s", text);
66 #endif
67 }
68
69 static void SDL_Parachute(int sig) 39 static void SDL_Parachute(int sig)
70 { 40 {
71 signal(sig, SIG_DFL); 41 signal(sig, SIG_DFL);
72 print_msg("Fatal signal: ");
73 switch (sig) {
74 case SIGSEGV:
75 print_msg("Segmentation Fault");
76 break;
77 #ifdef SIGBUS
78 #if SIGBUS != SIGSEGV
79 case SIGBUS:
80 print_msg("Bus Error");
81 break;
82 #endif
83 #endif /* SIGBUS */
84 #ifdef SIGFPE
85 case SIGFPE:
86 print_msg("Floating Point Exception");
87 break;
88 #endif /* SIGFPE */
89 #ifdef SIGQUIT
90 case SIGQUIT:
91 print_msg("Keyboard Quit");
92 break;
93 #endif /* SIGQUIT */
94 #ifdef SIGPIPE
95 case SIGPIPE:
96 print_msg("Broken Pipe");
97 break;
98 #endif /* SIGPIPE */
99 default:
100 #ifndef DISABLE_STDIO
101 fprintf(stderr, "# %d", sig);
102 #endif
103 break;
104 }
105 print_msg(" (SDL Parachute Deployed)\n");
106 SDL_Quit(); 42 SDL_Quit();
107 exit(-sig); 43 raise(sig);
108 } 44 }
109 45
110 static int SDL_fatal_signals[] = { 46 static int SDL_fatal_signals[] = {
111 SIGSEGV, 47 SIGSEGV,
112 #ifdef SIGBUS 48 #ifdef SIGBUS
180 } 116 }
181 } 117 }
182 #endif /* HAVE_SIGACTION */ 118 #endif /* HAVE_SIGACTION */
183 } 119 }
184 120
185 #endif /* NO_SIGNAL_H */ 121 #else
122
123 /* No signals on this platform, nothing to do.. */
124
125 void SDL_InstallParachute(void)
126 {
127 return;
128 }
129
130 void SDL_UninstallParachute(void)
131 {
132 return;
133 }
134
135 #endif /* HAVE_SIGNAL_H */