home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume32 / shlm / part01 / halt.c < prev    next >
C/C++ Source or Header  |  1992-09-20  |  1KB  |  57 lines

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