#include "config.h" /* ** Copyright 1998 - 2006 Double Precision, Inc. ** See COPYING for distribution information. */ #include "maildrop.h" #include "exittrap.h" #include #include #include #if SYSLOG_LOGGING #include #endif extern void killprocgroup(); int Maildrop::sigfpe; static RETSIGTYPE sig_fpe(int) { maildrop.sigfpe=1; signal (SIGFPE, sig_fpe); #if RETSIGTYPE != void return (0); #endif } void Maildrop::cleanup() { ExitTrap::onexit(); killprocgroup(); } RETSIGTYPE Maildrop::bye(int n) { static const char msg[]="maildrop: signal 0x"; static const char hex[]="0123456789ABCDEF"; cleanup(); if (write(2, msg, sizeof(msg)-1) < 0 || write(2, hex+ ((n / 16) & 0x0F), 1) < 0 || write(2, hex+ (n & 0x0F), 1) < 0 || write(2, "\n", 1) < 0) ; /* gcc shut up */ _exit(EX_TEMPFAIL); #if RETSIGTYPE != void return (0); #endif } int Maildrop::trap(int (*func)(int, char *[]), int argc, char *argv[]) { int n; for (n=0; n