#include <unistd.h>
#include <signal.h>
#include <errno.h>
-#include <sys/time.h>
+#include <fetchmail.h> /* for ROOT_UID */
#ifndef TRUE
#define TRUE 1
*/
static sig_atomic_t alarm_latch = FALSE;
-void gotsigalrm(int sig)
+RETSIGTYPE gotsigalrm(int sig)
{
- signal(sig, gotsigalrm);
+ set_signal_handler(sig, gotsigalrm);
lastsig = sig;
alarm_latch = TRUE;
}
ntimeout.it_value.tv_sec = seconds;
ntimeout.it_value.tv_usec = 0;
- siginterrupt(SIGALRM, 1);
alarm_latch = FALSE;
- signal(SIGALRM, gotsigalrm); /* first trap signals */
+ set_signal_handler(SIGALRM, gotsigalrm); /* first trap signals */
setitimer(ITIMER_REAL,&ntimeout,NULL); /* then start timer */
/* there is a very small window between the next two lines */
/* which could result in a deadlock. But this will now be */
ntimeout.it_interval.tv_sec = ntimeout.it_interval.tv_usec = 0;
ntimeout.it_value.tv_sec = ntimeout.it_value.tv_usec = 0;
setitimer(ITIMER_REAL,&ntimeout,NULL); /* now stop timer */
- signal(SIGALRM, SIG_IGN);
+ set_signal_handler(SIGALRM, SIG_IGN);
}
#else
/*
#endif
#else /* EMX */
alarm_latch = FALSE;
- signal(SIGALRM, gotsigalrm);
+ set_signal_handler(SIGALRM, gotsigalrm);
_beginthread(itimerthread, NULL, 32768, NULL);
/* see similar code above */
if (!alarm_latch)
pause();
- signal(SIGALRM, SIG_IGN);
+ set_signal_handler(SIGALRM, SIG_IGN);
#endif /* ! EMX */
- if (lastsig == SIGUSR1 || ((seconds && !getuid()) && lastsig == SIGHUP))
+ if (lastsig == SIGUSR1 || ((seconds && getuid() == ROOT_UID)
+ && lastsig == SIGHUP))
awoken = TRUE;
/* now lock out interrupts again */
- signal(SIGUSR1, SIG_IGN);
- if (!getuid())
- signal(SIGHUP, SIG_IGN);
+ set_signal_handler(SIGUSR1, SIG_IGN);
+ if (getuid() == ROOT_UID)
+ set_signal_handler(SIGHUP, SIG_IGN);
return(awoken ? lastsig : 0);
}
#ifdef MAIN
-int main(int argc, **argv)
+int main(int argc, char **argv)
{
for (;;)
{