home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / pp / pp-6.0 / Lib / util / timeout.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-12-18  |  986 b   |  55 lines

  1. /* timeout.c: provide a timeout function */
  2.  
  3. # ifndef lint
  4. static char Rcsid[] = "@(#)$Header: /xtel/pp/pp-beta/Lib/util/RCS/timeout.c,v 6.0 1991/12/18 20:25:18 jpo Rel $";
  5. # endif
  6.  
  7. /*
  8.  * $Header: /xtel/pp/pp-beta/Lib/util/RCS/timeout.c,v 6.0 1991/12/18 20:25:18 jpo Rel $
  9.  *
  10.  * $Log: timeout.c,v $
  11.  * Revision 6.0  1991/12/18  20:25:18  jpo
  12.  * Release 6.0
  13.  *
  14.  */
  15.  
  16.  
  17.  
  18. #include <signal.h>
  19. #include "util.h"
  20.  
  21.  
  22.  
  23. /* __________________________________________________________________________
  24.  
  25.  
  26. provide a timeout function for jobs that could potentially hang
  27. Only one entry is given - timeout(value)
  28. timeout(value) will be longjumped back to
  29.  
  30. ____________________________________________________________________________*/
  31.  
  32.  
  33.  
  34.  
  35. jmp_buf _timeobuf;
  36. static SFP      oldalrm;
  37.  
  38. /* ARGSUSED */
  39. SFD _tcatch(sig)
  40. int sig;
  41. {
  42.     longjmp(_timeobuf,1);
  43. }
  44.  
  45.  
  46. void _timeout(val)
  47. unsigned val;
  48. {
  49.     if(val)
  50.         oldalrm = signal (SIGALRM, _tcatch);
  51.     (void) alarm(val);
  52.     if (!val)
  53.         (void) signal (SIGALRM, oldalrm);
  54. }
  55.