Annotation of lucent/sys/src/cmd/rc/trap.c, revision 1.1.1.1

1.1       root        1: #include "rc.h"
                      2: #include "exec.h"
                      3: #include "fns.h"
                      4: #include "io.h"
                      5: char *Signame[];
                      6: void dotrap(void){
                      7:        register int i;
                      8:        register struct var *trapreq;
                      9:        register struct word *starval;
                     10:        starval=vlook("*")->val;
                     11:        while(ntrap) for(i=0;i!=NSIG;i++) while(trap[i]){
                     12:                --trap[i];
                     13:                --ntrap;
                     14:                if(getpid()!=mypid) Exit(getstatus());
                     15:                trapreq=vlook(Signame[i]);
                     16:                if(trapreq->fn){
                     17:                        start(trapreq->fn, trapreq->pc, (struct var *)0);
                     18:                        runq->local=newvar(strdup("*"), runq->local);
                     19:                        runq->local->val=copywords(starval, (struct word *)0);
                     20:                        runq->local->changed=1;
                     21:                        runq->redir=runq->startredir=0;
                     22:                }
                     23:                else if(i==SIGINT || i==SIGQUIT){
                     24:                        /*
                     25:                         * run the stack down until we uncover the
                     26:                         * command reading loop.  Xreturn will exit
                     27:                         * if there is none (i.e. if this is not
                     28:                         * an interactive rc.)
                     29:                         */
                     30:                        while(!runq->iflag) Xreturn();
                     31:                }
                     32:                else Exit(getstatus());
                     33:        }
                     34: }

unix.superglobalmegacorp.com

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