--- os/utils.c 2008-02-01 13:10:39 -0800 +++ os/utils.c 2008-02-01 13:20:59 -0800 @@ -285,7 +285,8 @@ sigaddset(&act.sa_mask, sig); act.sa_flags = 0; act.sa_handler = handler; - sigaction(sig, &act, &oact); + if (sigaction(sig, &act, &oact)) + perror("sigaction"); return oact.sa_handler; #endif } @@ -1684,6 +1685,10 @@ #ifdef SIGCHLD csig = signal(SIGCHLD, SIG_DFL); + if (csig == SIG_ERR) { + perror("signal"); + return -1; + } #endif #ifdef DEBUG @@ -1708,7 +1713,10 @@ } #ifdef SIGCHLD - signal(SIGCHLD, csig); + if (signal(SIGCHLD, csig) == SIG_ERR) { + perror("signal"); + return -1; + } #endif return p == -1 ? -1 : status; @@ -1720,7 +1728,7 @@ int pid; } *pidlist; -static sighandler_t old_alarm = NULL; /* XXX horrible awful hack */ +void (*old_alarm)(int) = NULL; /* XXX horrible awful hack */ pointer Popen(char *command, char *type) @@ -1745,13 +1753,18 @@ /* Ignore the smart scheduler while this is going on */ old_alarm = signal(SIGALRM, SIG_IGN); + if (old_alarm == SIG_ERR) { + perror("signal"); + return NULL; + } switch (pid = fork()) { case -1: /* error */ close(pdes[0]); close(pdes[1]); xfree(cur); - signal(SIGALRM, old_alarm); + if (signal(SIGALRM, old_alarm) == SIG_ERR) + perror("signal"); return NULL; case 0: /* child */ if (setgid(getgid()) == -1) @@ -1927,7 +1940,10 @@ /* allow EINTR again */ OsReleaseSignals (); - signal(SIGALRM, old_alarm); + if (old_alarm && signal(SIGALRM, old_alarm) == SIG_ERR) { + perror("signal"); + return -1; + } return pid == -1 ? -1 : pstat; }