-
-/*
- * signals.c -- general signals interface for nmh
+/* signals.c -- general signals interface for nmh
*
* This code is Copyright (c) 2002, by the authors of nmh. See the
* COPYRIGHT file in the root directory of the nmh distribution for
#include <h/mh.h>
#include <h/signals.h>
+#include "m_mktemp.h"
/*
# endif
}
if (sigaction(sig, &act, &oact) < 0)
- return (SIG_ERR);
- return (oact.sa_handler);
+ return SIG_ERR;
+ return oact.sa_handler;
}
struct sigaction act, oact;
if (sigaction(sig, NULL, &oact) < 0)
- return (SIG_ERR);
+ return SIG_ERR;
if (oact.sa_handler != SIG_IGN) {
act.sa_handler = func;
sigemptyset(&act.sa_mask);
# endif
}
if (sigaction(sig, &act, &oact) < 0)
- return (SIG_ERR);
+ return SIG_ERR;
}
- return (oact.sa_handler);
+ return oact.sa_handler;
}
+
+/*
+ * For use by nmh_init().
+ */
+int
+setup_signal_handlers(void) {
+ /*
+ * Catch HUP, INT, QUIT, and TERM so that we can clean up tmp
+ * files when the user terminates the process early. And also a
+ * few other common signals that can be thrown due to bugs, stack
+ * overflow, etc.
+ */
+
+ if (SIGNAL(SIGHUP, remove_registered_files) == SIG_ERR ||
+ SIGNAL(SIGINT, remove_registered_files) == SIG_ERR ||
+ SIGNAL(SIGQUIT, remove_registered_files) == SIG_ERR ||
+ SIGNAL(SIGTERM, remove_registered_files) == SIG_ERR ||
+ SIGNAL(SIGILL, remove_registered_files) == SIG_ERR ||
+# ifdef SIGBUS
+ SIGNAL(SIGBUS, remove_registered_files) == SIG_ERR ||
+# endif
+ SIGNAL(SIGSEGV, remove_registered_files) == SIG_ERR) {
+ return NOTOK;
+ }
+
+ return OK;
+}