]> Pileus Git - ~andy/fetchmail/blobdiff - idle.c
Attempt merging from 6.3.24.
[~andy/fetchmail] / idle.c
diff --git a/idle.c b/idle.c
index d91e10a2de9a589c845bc613f55ac8e0ac1ce489..04c191847870798f96634cf793f273724ce3c701 100644 (file)
--- a/idle.c
+++ b/idle.c
@@ -21,7 +21,7 @@ MIT license.  Compile with -DMAIN to build the demonstrator.
 #include <unistd.h>
 #include <signal.h>
 #include <errno.h>
-#include <sys/time.h>
+#include <fetchmail.h> /* for ROOT_UID */
 
 #ifndef TRUE
 #define TRUE 1
@@ -44,35 +44,17 @@ static sig_atomic_t alarm_latch = FALSE;
 
 void gotsigalrm(int sig)
 {
-    signal(sig, gotsigalrm);
+    set_signal_handler(sig, gotsigalrm);
     lastsig = sig;
     alarm_latch = TRUE;
 }
 #endif /* SLEEP_WITH_ALARM */
 
-#ifdef __EMX__
-/* Various EMX-specific definitions */
-static int itimerflag;
-
-void itimerthread(void* dummy)
-{
-    if (outlevel >= O_VERBOSE)
-       report(stderr, 
-              GT_("fetchmail: thread sleeping for %d sec.\n"), poll_interval);
-    while(1)
-    {
-       _sleep2(poll_interval*1000);
-       kill((getpid()), SIGALRM);
-    }
-}
-#endif
-
 int interruptible_idle(int seconds)
 /* time for a pause in the action; return TRUE if awakened by signal */
 {
     int awoken = FALSE;
 
-#ifndef __EMX__
 #ifdef SLEEP_WITH_ALARM                /* not normally on */
     /*
      * We can't use sleep(3) here because we need an alarm(3)
@@ -108,9 +90,8 @@ int interruptible_idle(int seconds)
     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  */
@@ -121,7 +102,7 @@ int interruptible_idle(int seconds)
     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
     /* 
@@ -145,28 +126,20 @@ int interruptible_idle(int seconds)
     } while (lastsig == SIGCHLD);
     }
 #endif
-#else /* EMX */
-    alarm_latch = FALSE;
-    signal(SIGALRM, gotsigalrm);
-    _beginthread(itimerthread, NULL, 32768, NULL);
-    /* see similar code above */
-    if (!alarm_latch)
-       pause();
-    signal(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 (;;)
     {