Annotation of researchv10no/cmd/spitbol/sigtrap.c, revision 1.1.1.1

1.1       root        1: #include <signal.h>
                      2: 
                      3: static char status [NSIG];
                      4: 
                      5: /* status codes */
                      6: #define        NONE            0
                      7: #define        UNCAUGHT        1
                      8: #define        CAUGHT          2
                      9: 
                     10: static void
                     11: trap (sig)
                     12: {
                     13:        if (sig >= 0 && sig < NSIG)
                     14:                status[sig] = CAUGHT;
                     15:        signal (sig, trap);
                     16: }
                     17: 
                     18: int
                     19: sigtrap (sig)
                     20:        register int sig;
                     21: {
                     22:        register int cancel = 0, r = NONE;
                     23: 
                     24:        if (sig < 0) {
                     25:                cancel++;
                     26:                sig = -sig;
                     27:        }
                     28: 
                     29:        if (sig > 0 && sig < NSIG) {
                     30: 
                     31:                r = status[sig];
                     32: 
                     33:                if (cancel) {
                     34:                        status[sig] = NONE;
                     35:                        if (r != NONE && signal (sig, SIG_IGN) != SIG_IGN)
                     36:                                signal (sig, SIG_DFL);
                     37:                } else {
                     38:                        status[sig] = UNCAUGHT;
                     39:                        if (r == NONE && signal (sig, SIG_IGN) != SIG_IGN)
                     40:                                signal (sig, trap);
                     41:                }
                     42:        }
                     43: 
                     44:        return r;
                     45: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.