Annotation of 43BSD/contrib/nntp/rrn/final.c, revision 1.1

1.1     ! root        1: /* $Header: final.c,v 4.3 85/05/01 11:38:08 lwall Exp $
        !             2:  *
        !             3:  * $Log:       final.c,v $
        !             4:  * Revision 4.3  85/05/01  11:38:08  lwall
        !             5:  * Baseline for release with 4.3bsd.
        !             6:  * 
        !             7:  */
        !             8: 
        !             9: #include "EXTERN.h"
        !            10: #include "common.h"
        !            11: #include "util.h"
        !            12: #include "term.h"
        !            13: #include "ng.h"
        !            14: #include "init.h"
        !            15: #include "bits.h"
        !            16: #include "last.h"
        !            17: #include "rcstuff.h"
        !            18: #include "ngdata.h"
        !            19: #include "INTERN.h"
        !            20: #include "final.h"
        !            21: 
        !            22: void
        !            23: final_init()
        !            24: {
        !            25: #ifdef SIGTSTP
        !            26:     sigset(SIGTSTP, stop_catcher);     /* job control signals */
        !            27:     sigset(SIGCONT, cont_catcher);     /* job control signals */
        !            28: #endif
        !            29: 
        !            30:     sigset(SIGINT, int_catcher);       /* always catch interrupts */
        !            31:     sigset(SIGHUP, sig_catcher);       /* and hangups */
        !            32: #ifndef lint
        !            33:     sigignore(SIGEMT);
        !            34: #endif lint
        !            35: 
        !            36:     sigset(SIGILL, sig_catcher);
        !            37:     sigset(SIGTRAP, sig_catcher);
        !            38:     sigset(SIGFPE, sig_catcher);
        !            39:     sigset(SIGBUS, sig_catcher);
        !            40:     sigset(SIGSEGV, sig_catcher);
        !            41:     sigset(SIGSYS, sig_catcher);
        !            42:     sigset(SIGTERM, sig_catcher);
        !            43: #ifdef SIGXCPU
        !            44:     sigset(SIGXCPU, sig_catcher);
        !            45: #endif
        !            46: #ifdef SIGXFSZ
        !            47:     sigset(SIGXFSZ, sig_catcher);
        !            48: #endif
        !            49: }
        !            50: 
        !            51: void                                   /* very much void */
        !            52: finalize(status)
        !            53: int status;
        !            54: {
        !            55:     if (bizarre)
        !            56:        resetty();
        !            57:     UNLINK(lockname);
        !            58: #ifdef SERVER
        !            59:     UNLINK(active_name);
        !            60: #endif
        !            61:     if (status < 0) {
        !            62:        chdir("/usr/tmp");
        !            63:        sigset(SIGILL,SIG_DFL);
        !            64:        abort();
        !            65:     }
        !            66:     exit(status);
        !            67: }
        !            68: 
        !            69: /* come here on interrupt */
        !            70: 
        !            71: int
        !            72: int_catcher()
        !            73: {
        !            74:     sigset(SIGINT,int_catcher);
        !            75: #ifdef DEBUGGING
        !            76:     if (debug)
        !            77:        write(2,"int_catcher\n",12);
        !            78: #endif
        !            79:     if (!waiting) {
        !            80:        if (int_count) {                /* was there already an interrupt? */
        !            81:            write(2,"\nBye-bye.\n",10);
        !            82:            sig_catcher(0);             /* emulate the other signals */
        !            83:        }
        !            84:        int_count++;
        !            85:     }
        !            86: }
        !            87: 
        !            88: /* come here on signal other than interrupt, stop, or cont */
        !            89: 
        !            90: int
        !            91: sig_catcher(signo)
        !            92: {
        !            93: #ifdef VERBOSE
        !            94:     static char *signame[] = {
        !            95:        "",
        !            96:        "HUP",
        !            97:        "INT",
        !            98:        "QUIT",
        !            99:        "ILL",
        !           100:        "TRAP",
        !           101:        "IOT",
        !           102:        "EMT",
        !           103:        "FPE",
        !           104:        "KILL",
        !           105:        "BUS",
        !           106:        "SEGV",
        !           107:        "SYS",
        !           108:        "PIPE",
        !           109:        "ALRM",
        !           110:        "TERM",
        !           111:        "???"
        !           112: #ifdef SIGTSTP
        !           113:        ,"STOP",
        !           114:        "TSTP",
        !           115:        "CONT",
        !           116:        "CHLD",
        !           117:        "TTIN",
        !           118:        "TTOU",
        !           119:        "TINT",
        !           120:        "XCPU",
        !           121:        "XFSZ"
        !           122: #ifdef SIGPROF
        !           123:        ,"VTALARM",
        !           124:        "PROF"
        !           125: #endif
        !           126: #endif
        !           127:        };
        !           128: #endif
        !           129: 
        !           130: #ifdef SIGTTOU
        !           131: #ifndef lint
        !           132:     sigignore(SIGTTOU);
        !           133: #endif lint
        !           134: #endif
        !           135: #ifdef DEBUGGING
        !           136:     if (debug) {
        !           137:        printf("\nSIG%s--.newsrc not restored in debug\n",signame[signo]);
        !           138:        finalize(-1);
        !           139:     }
        !           140: #endif
        !           141:     if (panic)
        !           142:        abort();
        !           143:     (void) sigset(SIGILL,SIG_DFL);
        !           144:     panic = TRUE;                      /* disable terminal I/O */
        !           145:     if (doing_ng) {                    /* need we reconstitute rc line? */
        !           146:        yankback();
        !           147:        restore_ng();                   /* then do so (hope this works) */
        !           148:     }
        !           149:     doing_ng = FALSE;
        !           150:     if (rc_changed)                    /* need we write .newsrc out? */
        !           151:        write_rc();                     /* then do so */
        !           152:     rc_changed = FALSE;
        !           153:     if (signo != SIGHUP)
        !           154: #ifdef VERBOSE
        !           155:        IF(verbose)
        !           156:            printf("\nCaught %s%s--.newsrc restored\n",
        !           157:                signo ? "a SIG" : "an internal error", signame[signo]);
        !           158:        ELSE
        !           159: #endif
        !           160: #ifdef TERSE
        !           161:            printf("\nSignal %d--bye bye\n",signo);
        !           162: #endif
        !           163:     switch (signo) {
        !           164:     case SIGBUS:
        !           165:     case SIGILL:
        !           166:     case SIGSEGV:
        !           167:        finalize(-signo);
        !           168:     }
        !           169:     finalize(1);                               /* and blow up */
        !           170: }
        !           171: 
        !           172: #ifdef SIGTSTP
        !           173: /* come here on stop signal */
        !           174: 
        !           175: int
        !           176: stop_catcher()
        !           177: {
        !           178:     if (!waiting) {
        !           179:        checkpoint_rc();                /* good chance of crash while stopped */
        !           180:        resetty();                      /* this is the point of all this */
        !           181: #ifdef DEBUGGING
        !           182:        if (debug)
        !           183:            write(2,"stop_catcher\n",13);
        !           184: #endif
        !           185:        sigset(SIGTSTP,SIG_DFL);        /* enable stop */
        !           186: #ifdef BSD42
        !           187:        sigsetmask(sigblock(0) & ~(1 << (SIGTSTP-1)));
        !           188: #endif
        !           189:        kill(0,SIGTSTP);                /* and do the stop */
        !           190:     }
        !           191:     sigset(SIGTSTP,stop_catcher);      /* unenable the stop */
        !           192: }
        !           193: 
        !           194: /* come here on cont signal */
        !           195: 
        !           196: int
        !           197: cont_catcher()
        !           198: {
        !           199:     sigset(SIGCONT,cont_catcher);
        !           200:     savetty();
        !           201: #ifdef MAILCALL;
        !           202:     mailcount = 0;                     /* force recheck */
        !           203: #endif
        !           204:     if (!panic) {
        !           205:        if (!waiting) {
        !           206: #ifdef DEBUGGING
        !           207:            if (debug)
        !           208:                write(2,"cont_catcher\n",13);
        !           209: #endif
        !           210:            noecho();                   /* set no echo */
        !           211:            crmode();                   /* set cbreak mode */
        !           212:            forceme("\f");              /* cause a refresh */
        !           213:                                        /* (defined only if TIOCSTI defined) */
        !           214:        }
        !           215:     }
        !           216: }
        !           217: #endif
        !           218: 

unix.superglobalmegacorp.com

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