sig_die.c 689 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #include "stdio.h"
  2. #include "signal.h"
  3. #ifndef SIGIOT
  4. #ifdef SIGABRT
  5. #define SIGIOT SIGABRT
  6. #endif
  7. #endif
  8. #ifdef KR_headers
  9. void sig_die(s, kill) char *s; int kill;
  10. #else
  11. #include "stdlib.h"
  12. #ifdef __cplusplus
  13. extern "C" {
  14. #endif
  15. #ifdef __cplusplus
  16. extern "C" {
  17. #endif
  18. extern void f_exit(void);
  19. void sig_die(const char *s, int kill)
  20. #endif
  21. {
  22. /* print error message, then clear buffers */
  23. fprintf(stderr, "%s\n", s);
  24. if(kill)
  25. {
  26. fflush(stderr);
  27. f_exit();
  28. fflush(stderr);
  29. /* now get a core */
  30. #ifdef SIGIOT
  31. signal(SIGIOT, SIG_DFL);
  32. #endif
  33. abort();
  34. }
  35. else {
  36. #ifdef NO_ONEXIT
  37. f_exit();
  38. #endif
  39. exit(1);
  40. }
  41. }
  42. #ifdef __cplusplus
  43. }
  44. #endif
  45. #ifdef __cplusplus
  46. }
  47. #endif