dovecot-2.0: lib-signals: Compile fix for Hurd (SA_SIGINFO not a...

dovecot at dovecot.org dovecot at dovecot.org
Wed Dec 16 21:03:49 EET 2009


details:   http://hg.dovecot.org/dovecot-2.0/rev/9c2fe6d0b684
changeset: 10504:9c2fe6d0b684
user:      Timo Sirainen <tss at iki.fi>
date:      Wed Dec 16 14:03:40 2009 -0500
description:
lib-signals: Compile fix for Hurd (SA_SIGINFO not available).
Based on patch by Marco Nenciarini.

diffstat:

1 file changed, 28 insertions(+), 1 deletion(-)
src/lib/lib-signals.c |   29 ++++++++++++++++++++++++++++-

diffs (78 lines):

diff -r e7cd1b10f18b -r 9c2fe6d0b684 src/lib/lib-signals.c
--- a/src/lib/lib-signals.c	Wed Dec 16 13:48:16 2009 -0500
+++ b/src/lib/lib-signals.c	Wed Dec 16 14:03:40 2009 -0500
@@ -10,6 +10,12 @@
 #include <unistd.h>
 
 #define MAX_SIGNAL_VALUE 31
+
+#if !defined(SA_SIGINFO) && !defined(SI_NOINFO)
+/* without SA_SIGINFO we don't know what the real code is. we need SI_NOINFO
+   to make sure lib_signal_code_to_str() returns "". */
+#  define SI_NOINFO -1
+#endif
 
 struct signal_handler {
 	signal_handler_t *handler;
@@ -75,12 +81,19 @@ const char *lib_signal_code_to_str(int s
 	return t_strdup_printf("unknown %d", sicode);
 }
 
+#ifdef SA_SIGINFO
 static void sig_handler(int signo, siginfo_t *si, void *context ATTR_UNUSED)
+#else
+static void sig_handler(int signo)
+#endif
 {
 	struct signal_handler *h;
 	char c = 0;
 
-#ifdef SI_NOINFO
+#if defined(SI_NOINFO) || !defined(SA_SIGINFO)
+#ifndef SA_SIGINFO
+	siginfo_t *si = NULL;
+#endif
 	siginfo_t tmp_si;
 
 	if (si == NULL) {
@@ -115,8 +128,12 @@ static void sig_handler(int signo, sigin
 	}
 }
 
+#ifdef SA_SIGINFO
 static void sig_ignore(int signo ATTR_UNUSED, siginfo_t *si ATTR_UNUSED,
 		       void *context ATTR_UNUSED)
+#else
+static void sig_ignore(int signo ATTR_UNUSED)
+#endif
 {
 	/* if we used SIG_IGN instead of this function,
 	   the system call might be restarted */
@@ -173,8 +190,13 @@ static void lib_signals_set(int signo, b
 
 	if (sigemptyset(&act.sa_mask) < 0)
 		i_fatal("sigemptyset(): %m");
+#ifdef SA_SIGINFO
 	act.sa_flags = SA_SIGINFO;
 	act.sa_sigaction = ignore ? sig_ignore : sig_handler;
+#else
+	act.sa_flags = 0;
+	act.sa_handler = ignore ? sig_ignore : sig_handler;
+#endif
 	if (sigaction(signo, &act, NULL) < 0)
 		i_fatal("sigaction(%d): %m", signo);
 }
@@ -235,8 +257,13 @@ void lib_signals_ignore(int signo, bool 
 		act.sa_flags = SA_RESTART;
 		act.sa_handler = SIG_IGN;
 	} else {
+#ifdef SA_SIGINFO
 		act.sa_flags = SA_SIGINFO;
 		act.sa_sigaction = sig_ignore;
+#else
+		act.sa_flags = 0;
+		act.sa_handler = sig_ignore;
+#endif
 	}
 
 	if (sigaction(signo, &act, NULL) < 0)


More information about the dovecot-cvs mailing list