Lines Matching refs:shp

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