See ChangeLog: Tue Oct 26 14:10:21 CEST 1999 Werner Koch
[gnupg.git] / g10 / signal.c
index 1f599d9..6ed23e5 100644 (file)
@@ -1,5 +1,5 @@
 /* signal.c - signal handling
- *     Copyright (C) 1998 Free Software Foundation, Inc.
+ *     Copyright (C) 1998, 1999 Free Software Foundation, Inc.
  *
  * This file is part of GnuPG.
  *
@@ -39,28 +39,34 @@ static volatile int caught_fatal_sig = 0;
 static volatile int caught_sigusr1 = 0;
 
 static const char *
-signal_name( int signum )
+get_signal_name( int signum )
 {
-  #if SYS_SIGLIST_DECLARED
-    return sys_siglist[signum];
+  #if defined(SYS_SIGLIST_DECLARED) && defined(NSIG)
+    return (signum >= 0 && signum < NSIG) ? sys_siglist[signum] : "?";
   #else
-    static char buf[20];
-    sprintf(buf, "signal %d", signum );
-    return buf;
+    return "some signal";
   #endif
 }
 
+
 static RETSIGTYPE
 got_fatal_signal( int sig )
 {
+    const char *s;
+
     if( caught_fatal_sig )
        raise( sig );
     caught_fatal_sig = 1;
 
-    fprintf( stderr, "\n%s: %s caught ... exiting\n",
-             log_get_name(), signal_name(sig) );
     secmem_term();
-    exit( 8 );
+  #ifdef IS_DEVELOPMENT_VERSION
+    write(2, "\n", 1 );
+    s = log_get_name(); if( s ) write(2, s, strlen(s) );
+    write(2, ": ", 2 );
+    s = get_signal_name(sig); write(2, s, strlen(s) );
+    write(2, " caught ... exiting\n", 21 );
+  #endif
+    exit(8); /* Hmmm, for some reasons rais2e does not work */
 }
 
 
@@ -70,7 +76,7 @@ got_usr_signal( int sig )
     caught_sigusr1 = 1;
 }
 
-#ifndef __MINGW32__
+#ifndef HAVE_DOSISH_SYSTEM
 static void
 do_sigaction( int sig, struct sigaction *nact )
 {
@@ -85,7 +91,7 @@ do_sigaction( int sig, struct sigaction *nact )
 void
 init_signals()
 {
-  #ifndef __MINGW32__
+  #ifndef HAVE_DOSISH_SYSTEM
     struct sigaction nact;
 
     nact.sa_handler = got_fatal_signal;
@@ -99,6 +105,8 @@ init_signals()
     do_sigaction( SIGSEGV, &nact );
     nact.sa_handler = got_usr_signal;
     sigaction( SIGUSR1, &nact, NULL );
+    nact.sa_handler = SIG_IGN;
+    sigaction( SIGPIPE, &nact, NULL );
   #endif
 }
 
@@ -106,7 +114,7 @@ init_signals()
 void
 pause_on_sigusr( int which )
 {
-  #ifndef __MINGW32__
+  #ifndef HAVE_DOSISH_SYSTEM
     sigset_t mask, oldmask;
 
     assert( which == 1 );
@@ -125,7 +133,7 @@ pause_on_sigusr( int which )
 static void
 do_block( int block )
 {
-  #ifndef __MINGW32__
+  #ifndef HAVE_DOSISH_SYSTEM
     static int is_blocked;
     static sigset_t oldmask;
 
@@ -144,7 +152,7 @@ do_block( int block )
        sigprocmask( SIG_SETMASK, &oldmask, NULL );
        is_blocked = 0;
     }
-  #endif /*__MINGW32__*/
+  #endif /*HAVE_DOSISH_SYSTEM*/
 }