Lines Matching refs:shp

65 	register Shell_t	*shp = sh_getinterp();  in sh_fault()  local
68 register struct checkpt *pp = (struct checkpt*)shp->jmplist; in sh_fault()
84 shp->winch++; in sh_fault()
87 trap = shp->st.trapcom[sig]; in sh_fault()
88 if(shp->savesig) in sh_fault()
91 if(!(shp->sigflag[sig]&SH_SIGIGNORE)) in sh_fault()
92 shp->savesig = sig; in sh_fault()
95 if(sig==SIGALRM && shp->bltinfun==b_sleep) in sh_fault()
99 shp->trapnote |= SH_SIGTRAP; in sh_fault()
100 shp->sigflag[sig] |= SH_SIGTRAP; in sh_fault()
104 if(shp->subshell && trap && sig!=SIGINT && sig!=SIGQUIT && sig!=SIGWINCH && sig!=SIGCONT) in sh_fault()
106 shp->exitval = SH_EXITSIG|sig; in sh_fault()
108 shp->exitval = 0; in sh_fault()
114 flag = shp->sigflag[sig]&~SH_SIGOFF; in sh_fault()
117 if(sig==SIGINT && (shp->trapnote&SH_SIGIGNORE)) in sh_fault()
121 if(shp->subshell) in sh_fault()
122 shp->ignsig = sig; in sh_fault()
129 …if((flag&SH_SIGINTERACTIVE) && sh_isstate(SH_INTERACTIVE) && !sh_isstate(SH_FORKED) && ! shp->subs… in sh_fault()
133 shp->trapnote |= SH_SIGTERM; in sh_fault()
136 shp->lastsig = sig; in sh_fault()
141 pp->mode = shp->subshell?SH_JMPSUB:SH_JMPFUN; in sh_fault()
145 if(shp->subshell) in sh_fault()
151 sh_done(shp,sig); in sh_fault()
154 shp->trapnote |= SH_SIGSET; in sh_fault()
155 if(sig <= shp->gd->sigmax) in sh_fault()
156 shp->sigflag[sig] |= SH_SIGSET; in sh_fault()
171 if(pp->mode==SH_JMPCMD || (pp->mode==1 && shp->bltinfun) && !(flag&SH_SIGIGNORE)) in sh_fault()
172 shp->lastsig = sig; in sh_fault()
184 shp->lastsig = sig; in sh_fault()
189 shp->trapnote |= SH_SIGTSTP; in sh_fault()
200 if((error_info.flags&ERROR_NOTIFY) && shp->bltinfun) in sh_fault()
201 action = (*shp->bltinfun)(-sig,(char**)0,(void*)0); in sh_fault()
205 if(shp->bltinfun && shp->bltindata.notify) in sh_fault()
207 shp->bltindata.sigset = 1; in sh_fault()
210 shp->trapnote |= flag; in sh_fault()
211 if(sig <= shp->gd->sigmax) in sh_fault()
212 shp->sigflag[sig] |= flag; in sh_fault()
227 Shell_t *shp = (Shell_t*)ptr; in sh_siginit() local
235 shp->gd->sigruntime[SH_SIGRTMIN] = n; in sh_siginit()
236 shp->gd->sigruntime[SH_SIGRTMAX] = sig; in sh_siginit()
246 sig = shp->gd->sigruntime[sig]; in sh_siginit()
252 shp->gd->sigmax = n++; in sh_siginit()
253 shp->st.trapcom = (char**)calloc(n,sizeof(char*)); in sh_siginit()
254 shp->sigflag = (unsigned char*)calloc(n,1); in sh_siginit()
255 shp->gd->sigmsg = (char**)calloc(n,sizeof(char*)); in sh_siginit()
259 if((sig &= ((1<<SH_SIGBITS)-1)) > (shp->gd->sigmax+1)) in sh_siginit()
263 sig = shp->gd->sigruntime[sig]; in sh_siginit()
266 shp->sigflag[sig] = n; in sh_siginit()
268 shp->gd->sigmsg[sig] = (char*)tp->sh_value; in sh_siginit()
387 void sh_chktrap(Shell_t* shp) in sh_chktrap() argument
389 register int sig=shp->st.trapmax; in sh_chktrap()
391 if(!(shp->trapnote&~SH_SIGIGNORE)) in sh_chktrap()
393 shp->trapnote &= ~SH_SIGTRAP; in sh_chktrap()
395 if(sh_isstate(SH_ERREXIT) && shp->exitval) in sh_chktrap()
397 int sav_trapnote = shp->trapnote; in sh_chktrap()
398 shp->trapnote &= ~SH_SIGSET; in sh_chktrap()
399 if(shp->st.trap[SH_ERRTRAP]) in sh_chktrap()
401 trap = shp->st.trap[SH_ERRTRAP]; in sh_chktrap()
402 shp->st.trap[SH_ERRTRAP] = 0; in sh_chktrap()
404 shp->st.trap[SH_ERRTRAP] = trap; in sh_chktrap()
406 shp->trapnote = sav_trapnote; in sh_chktrap()
409 struct checkpt *pp = (struct checkpt*)shp->jmplist; in sh_chktrap()
411 sh_exit(shp->exitval); in sh_chktrap()
414 if(shp->sigflag[SIGALRM]&SH_SIGALRM) in sh_chktrap()
415 sh_timetraps(shp); in sh_chktrap()
417 if((shp->sigflag[SIGCHLD]&SH_SIGTRAP) && shp->st.trapcom[SIGCHLD]) in sh_chktrap()
418 job_chldtrap(shp,shp->st.trapcom[SIGCHLD],1); in sh_chktrap()
428 if(shp->sigflag[sig]&SH_SIGTRAP) in sh_chktrap()
430 shp->sigflag[sig] &= ~SH_SIGTRAP; in sh_chktrap()
431 if(trap=shp->st.trapcom[sig]) in sh_chktrap()
448 Shell_t *shp = sh_getinterp(); in sh_trap() local
449 int jmpval, savxit = shp->exitval; in sh_trap()
458 memcpy(ifstable,shp->ifstable,sizeof(ifstable)); in sh_trap()
461 shp->intrap++; in sh_trap()
462 sh_pushcontext(shp,&buff,SH_JMPTRAP); in sh_trap()
485 savxit = shp->exitval; in sh_trap()
489 sh_popcontext(shp,&buff); in sh_trap()
490 shp->intrap--; in sh_trap()
491 sfsync(shp->outpool); in sh_trap()
492 if(!shp->indebug && jmpval!=SH_JMPEXIT && jmpval!=SH_JMPFUN) in sh_trap()
493 shp->exitval=savxit; in sh_trap()
496 memcpy(shp->ifstable,ifstable,sizeof(ifstable)); in sh_trap()
502 …if(jmpval>SH_JMPTRAP && (((struct checkpt*)shp->jmpbuffer)->prev || ((struct checkpt*)shp->jmpbuff… in sh_trap()
503 siglongjmp(*shp->jmplist,jmpval); in sh_trap()
504 return(shp->exitval); in sh_trap()
512 Shell_t *shp = sh_getinterp(); in sh_exit() local
513 register struct checkpt *pp = (struct checkpt*)shp->jmplist; in sh_exit()
516 shp->exitval=xno; in sh_exit()
518 shp->exitval |= (sig=shp->lastsig); in sh_exit()
522 if(shp->trapnote&SH_SIGTSTP) in sh_exit()
525 shp->trapnote = 0; in sh_exit()
526 shp->sigflag[SIGTSTP] = 0; in sh_exit()
527 if(!shp->subshell && sh_isstate(SH_MONITOR) && !sh_isstate(SH_STOPOK)) in sh_exit()
532 shp->lastsig = 0; in sh_exit()
535 shp->trapnote = 0; in sh_exit()
536 shp->forked = 1; in sh_exit()
537 if(!shp->subshell && (sig=sh_fork(shp,0,NIL(int*)))) in sh_exit()
542 shp->forked = 0; in sh_exit()
544 shp->sigflag[SIGTSTP] = 0; in sh_exit()
546 shp->exitval = (SH_EXITSIG|SIGTSTP); in sh_exit()
552 if(shp->subshell) in sh_exit()
557 shp->sigflag[SIGTSTP] = 0; in sh_exit()
562 shp->exitval = (xno&SH_EXITMASK); in sh_exit()
569 if(!(pool=sfpool(NIL(Sfio_t*),shp->outpool,SF_WRITE))) in sh_exit()
570 pool = shp->outpool; /* can't happen? */ in sh_exit()
573 if(shp->lastsig==SIGPIPE) in sh_exit()
578 sh_done(shp,sig); in sh_exit()
579 shp->prefix = 0; in sh_exit()
581 shp->mktype = 0; in sh_exit()
586 sh_done(shp,sig); in sh_exit()
605 Shell_t *shp = (Shell_t*)ptr; in sh_done() local
607 register int savxit = shp->exitval; in sh_done()
608 shp->trapnote = 0; in sh_done()
612 if(shp->userinit) in sh_done()
613 (*shp->userinit)(shp, -1); in sh_done()
614 if(t=shp->st.trapcom[0]) in sh_done()
616 shp->st.trapcom[0]=0; /*should free but not long */ in sh_done()
617 shp->oldexit = savxit; in sh_done()
619 savxit = shp->exitval; in sh_done()
625 sh_chktrap(shp); in sh_done()
627 nv_scan(shp->var_tree,array_notify,(void*)0,NV_ARRAY,NV_ARRAY); in sh_done()
628 sh_freeup(shp); in sh_done()
637 …if((sh_isoption(SH_INTERACTIVE) && shp->login_sh) || (!sh_isoption(SH_INTERACTIVE) && (sig==SIGHUP… in sh_done()
640 job_close(shp); in sh_done()
641 if(nv_search("VMTRACE", shp->var_tree,0)) in sh_done()
644 sfsync((Sfio_t*)shp->outpool); in sh_done()
669 kiaclose((Lex_t*)shp->lex_context); in sh_done()