Diff for /gforth/engine/signals.c between versions 1.4 and 1.9

version 1.4, 1999/08/07 21:40:37 version 1.9, 2000/07/21 09:25:27
Line 47 Line 47
 UCell cols=DEFAULTCOLS;  UCell cols=DEFAULTCOLS;
 UCell rows=DEFAULTROWS;  UCell rows=DEFAULTROWS;
   
   #ifndef SA_NODEFER
   #define SA_NODEFER 0
   /* systems that don't have SA_NODEFER hopefully don't block anyway */
   #endif
   
   #ifdef SA_SIGINFO
   void install_signal_handler(int sig, void (*handler)(int, siginfo_t *, void *))
        /* installs three-argument signal handler for sig */
   {
     struct sigaction action;
   
     action.sa_sigaction=handler;
     sigemptyset(&action.sa_mask);
     action.sa_flags=SA_RESTART|SA_NODEFER|SA_SIGINFO; /* pass siginfo */
     sigaction(sig, &action, NULL);
   }
   #endif
   
   typedef void Sigfunc(int);
   
   Sigfunc *bsd_signal(int signo, Sigfunc *func)
   {
     struct sigaction act, oact;
   
     act.sa_handler=func;
     sigemptyset(&act.sa_mask);
     act.sa_flags=SA_NODEFER;
     if (sigaction(signo,&act,&oact) < 0)
       return SIG_ERR;
     else
       return oact.sa_handler;
   }
   
 static void  static void
 graceful_exit (int sig)  graceful_exit (int sig)
Line 131  static void segv_handler(int sig, siginf Line 163  static void segv_handler(int sig, siginf
 #endif /* defined(SA_SIGINFO) */  #endif /* defined(SA_SIGINFO) */
   
 #ifdef SIGCONT  #ifdef SIGCONT
 static void termprep (int sig)  static void termprep(int sig)
 {  {
   signal(sig,termprep);    bsd_signal(sig,termprep);
   terminal_prepped=0;    terminal_prepped=0;
 }  }
 #endif  #endif
Line 165  void get_winsize() Line 197  void get_winsize()
 #ifdef SIGWINCH  #ifdef SIGWINCH
 static void change_winsize(int sig)  static void change_winsize(int sig)
 {  {
   signal(sig,change_winsize);    /* signal(sig,change_winsize); should not be necessary with bsd_signal */
 #ifdef TIOCGWINSZ  #ifdef TIOCGWINSZ
   get_winsize();    get_winsize();
 #endif  #endif
 }  }
 #endif  #endif
   
   
 #ifdef SA_SIGINFO  
 void install_signal_handler(int sig, void (*handler)(int, siginfo_t *, void *))  
      /* installs three-argument signal handler for sig */  
 {  
   struct sigaction action;  
   
   action.sa_sigaction=handler;  
   sigemptyset(&action.sa_mask);  
   action.sa_flags=SA_RESTART|SA_SIGINFO; /* pass siginfo */  
   sigaction(sig, &action, NULL);  
 }  
 #endif  
   
 void install_signal_handlers(void)  void install_signal_handlers(void)
 {  {
   
Line 344  void install_signal_handlers(void) Line 362  void install_signal_handlers(void)
     signal (sigs_to_ignore [i], SIG_IGN);      signal (sigs_to_ignore [i], SIG_IGN);
 */  */
   for (i = 0; i < DIM (sigs_to_throw); i++)    for (i = 0; i < DIM (sigs_to_throw); i++)
     signal(sigs_to_throw[i], throw_handler);      bsd_signal(sigs_to_throw[i], throw_handler);
   for (i = 0; i < DIM (sigs_to_quit); i++)    for (i = 0; i < DIM (sigs_to_quit); i++)
     signal (sigs_to_quit [i], graceful_exit);      bsd_signal(sigs_to_quit [i], graceful_exit);
 #ifdef SA_SIGINFO  #ifdef SA_SIGINFO
   install_signal_handler(SIGFPE, fpe_handler);    install_signal_handler(SIGFPE, fpe_handler);
   install_signal_handler(SIGSEGV, segv_handler);    install_signal_handler(SIGSEGV, segv_handler);
 #endif  #endif
 #ifdef SIGCONT  #ifdef SIGCONT
     signal (SIGCONT, termprep);      bsd_signal(SIGCONT, termprep);
 #endif  #endif
 #ifdef SIGWINCH  #ifdef SIGWINCH
     signal (SIGWINCH, change_winsize);      bsd_signal(SIGWINCH, change_winsize);
 #endif  #endif
 }  }

Removed from v.1.4  
changed lines
  Added in v.1.9


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>