halt.c
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:1k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. /*
  2. **
  3. ** halt.c
  4. **
  5. ** This is used to print out error messages and exit
  6. */
  7. #include <varargs.h>
  8. #include <signal.h>
  9. #include <stdio.h>
  10. #include <errno.h>
  11. /*-------------------------------------------------------------------------
  12. **
  13. ** halt - print error message, and call clean up routine or exit
  14. **
  15. **------------------------------------------------------------------------*/
  16. /*VARARGS*/
  17. void
  18. halt(va_alist)
  19. va_dcl
  20. {
  21. va_list arg_ptr;
  22. char    *format,
  23.    *pstr;
  24. void (*sig_func) ();
  25. va_start(arg_ptr);
  26. format = va_arg(arg_ptr, char *);
  27. if (strncmp(format, "PERROR", 6) != 0)
  28. vfprintf(stderr, format, arg_ptr);
  29. else
  30. {
  31. for (pstr = format + 6; *pstr == ' ' || *pstr == ':'; pstr++)
  32. ;
  33. vfprintf(stderr, pstr, arg_ptr);
  34. perror("");
  35. }
  36. va_end(arg_ptr);
  37. fflush(stderr);
  38. /* call one clean up function if defined */
  39. if ((sig_func = signal(SIGTERM, SIG_DFL)) !=SIG_DFL &&
  40. sig_func !=SIG_IGN)
  41. (*sig_func) (0);
  42. else if ((sig_func = signal(SIGHUP, SIG_DFL)) !=SIG_DFL &&
  43.  sig_func !=SIG_IGN)
  44. (*sig_func) (0);
  45. else if ((sig_func = signal(SIGINT, SIG_DFL)) !=SIG_DFL &&
  46.  sig_func !=SIG_IGN)
  47. (*sig_func) (0);
  48. else if ((sig_func = signal(SIGQUIT, SIG_DFL)) !=SIG_DFL &&
  49.  sig_func !=SIG_IGN)
  50. (*sig_func) (0);
  51. exit(1);
  52. }