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