Annotation of researchv10dc/cmd/spitbol/sigtrap.c, revision 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.