Lines Matching refs:shp

61 	Shell_t *shp = sh_getinterp();  in malloc_done()  local
63 sh_exit(shp,SH_EXITSIG); in malloc_done()
68 static int notify_builtin(Shell_t *shp, int sig) in notify_builtin() argument
73 action = (*shp->bltinfun)(-sig,(char**)0,(void*)0); in notify_builtin()
77 if(shp->bltindata.notify) in notify_builtin()
78 shp->bltindata.sigset = 1; in notify_builtin()
83 static void set_trapinfo(Shell_t *shp, int sig, siginfo_t *info) in set_trapinfo() argument
92 if(!(jp=(struct Siginfo*)shp->siginfo[sig])) in set_trapinfo()
95 shp->siginfo[sig] = (void*)ip; in set_trapinfo()
116 register Shell_t *shp = sh_getinterp(); in sh_fault() local
119 register struct checkpt *pp = (struct checkpt*)shp->jmplist; in sh_fault()
125 shp->winch = 1; in sh_fault()
127 trap = shp->st.trapcom[sig]; in sh_fault()
134 if(shp->savesig) in sh_fault()
137 if(!(shp->sigflag[sig]&SH_SIGIGNORE)) in sh_fault()
138 shp->savesig = sig; in sh_fault()
144 flag = shp->sigflag[sig]&~SH_SIGOFF; in sh_fault()
147 if(sig==SIGINT && (shp->trapnote&SH_SIGIGNORE)) in sh_fault()
151 if(shp->subshell) in sh_fault()
152 shp->ignsig = sig; in sh_fault()
158 if(shp->bltinfun) in sh_fault()
159 action = notify_builtin(shp,sig); in sh_fault()
160 …if((flag&SH_SIGINTERACTIVE) && sh_isstate(shp,SH_INTERACTIVE) && !sh_isstate(shp,SH_FORKED) && ! s… in sh_fault()
164 shp->trapnote |= SH_SIGTERM; in sh_fault()
167 shp->lastsig = sig; in sh_fault()
172 pp->mode = shp->subshell?SH_JMPSUB:SH_JMPFUN; in sh_fault()
176 if(shp->subshell) in sh_fault()
177 sh_exit(shp,SH_EXITSIG); in sh_fault()
182 sh_done(shp,sig); in sh_fault()
185 shp->trapnote |= SH_SIGSET; in sh_fault()
186 if(sig < shp->gd->sigmax) in sh_fault()
187 shp->sigflag[sig] |= SH_SIGSET; in sh_fault()
202 if(pp->mode==SH_JMPCMD || (pp->mode==1 && shp->bltinfun) && !(flag&SH_SIGIGNORE)) in sh_fault()
203 shp->lastsig = sig; in sh_fault()
210 set_trapinfo(shp,sig,info); in sh_fault()
218 shp->lastsig = sig; in sh_fault()
223 shp->trapnote |= SH_SIGTSTP; in sh_fault()
224 if(pp->mode==SH_JMPCMD && sh_isstate(shp,SH_STOPOK)) in sh_fault()
227 sh_exit(shp,SH_EXITSIG); in sh_fault()
233 if(shp->bltinfun) in sh_fault()
234 action = notify_builtin(shp,sig); in sh_fault()
237 shp->trapnote |= flag; in sh_fault()
242 if(sig < shp->gd->sigmax) in sh_fault()
243 shp->sigflag[sig] |= flag; in sh_fault()
244 if(pp->mode==SH_JMPCMD && sh_isstate(shp,SH_STOPOK)) in sh_fault()
249 sh_exit(shp,SH_EXITSIG); in sh_fault()
260 Shell_t *shp = (Shell_t*)ptr; in sh_siginit() local
268 shp->gd->sigruntime[SH_SIGRTMIN] = n; in sh_siginit()
269 shp->gd->sigruntime[SH_SIGRTMAX] = sig; in sh_siginit()
279 sig = shp->gd->sigruntime[sig]; in sh_siginit()
285 shp->gd->sigmax = ++n; in sh_siginit()
286 shp->st.trapcom = (char**)calloc(n,sizeof(char*)); in sh_siginit()
287 shp->sigflag = (unsigned char*)calloc(n,sizeof(char)); in sh_siginit()
288 shp->gd->sigmsg = (char**)calloc(n,sizeof(char*)); in sh_siginit()
289 shp->siginfo = (void**)calloc(sizeof(void*),shp->gd->sigmax); in sh_siginit()
293 if((sig &= ((1<<SH_SIGBITS)-1)) > (shp->gd->sigmax)) in sh_siginit()
297 sig = shp->gd->sigruntime[sig]; in sh_siginit()
300 shp->sigflag[sig] = n; in sh_siginit()
302 shp->gd->sigmsg[sig] = (char*)tp->sh_value; in sh_siginit()
310 void sh_sigtrap(Shell_t *shp,register int sig) in sh_sigtrap() argument
314 shp->st.otrapcom = 0; in sh_sigtrap()
316 sh_sigdone(shp); in sh_sigtrap()
317 else if(!((flag=shp->sigflag[sig])&(SH_SIGFAULT|SH_SIGOFF))) in sh_sigtrap()
332 shp->sigflag[sig] = flag; in sh_sigtrap()
339 void sh_sigdone(Shell_t *shp) in sh_sigdone() argument
342 shp->sigflag[0] |= SH_SIGFAULT; in sh_sigdone()
345 flag = shp->sigflag[sig]; in sh_sigdone()
347 sh_sigtrap(shp,sig); in sh_sigdone()
356 void sh_sigreset(Shell_t *shp,register int mode) in sh_sigreset() argument
362 register int flag, sig=shp->st.trapmax; in sh_sigreset()
366 if(trap=shp->st.trapcom[sig]) in sh_sigreset()
368 flag = shp->sigflag[sig]&~(SH_SIGTRAP|SH_SIGSET); in sh_sigreset()
373 shp->st.trapcom[sig] = 0; in sh_sigreset()
382 shp->sigflag[sig] = flag; in sh_sigreset()
387 if(trap=shp->st.trap[sig]) in sh_sigreset()
391 shp->st.trap[sig] = 0; in sh_sigreset()
395 shp->st.trapcom[0] = 0; in sh_sigreset()
397 shp->st.trapmax = 0; in sh_sigreset()
398 shp->trapnote=0; in sh_sigreset()
404 void sh_sigclear(Shell_t *shp,register int sig) in sh_sigclear() argument
406 register int flag = shp->sigflag[sig]; in sh_sigclear()
408 shp->st.otrapcom=0; in sh_sigclear()
412 if(trap=shp->st.trapcom[sig]) in sh_sigclear()
414 if(!shp->subshell) in sh_sigclear()
416 shp->st.trapcom[sig]=0; in sh_sigclear()
418 shp->sigflag[sig] = flag; in sh_sigclear()
425 void sh_chktrap(Shell_t* shp) in sh_chktrap() argument
427 register int sig=shp->st.trapmax; in sh_chktrap()
430 if(!(shp->trapnote&~SH_SIGIGNORE)) in sh_chktrap()
434 shp->trapnote &= ~SH_SIGTRAP; in sh_chktrap()
435 if(shp->winch) in sh_chktrap()
444 shp->winch = 0; in sh_chktrap()
447 if(sh_isstate(shp,SH_ERREXIT) && shp->exitval) in sh_chktrap()
449 int sav_trapnote = shp->trapnote; in sh_chktrap()
450 shp->trapnote &= ~SH_SIGSET; in sh_chktrap()
451 if(shp->st.trap[SH_ERRTRAP]) in sh_chktrap()
453 trap = shp->st.trap[SH_ERRTRAP]; in sh_chktrap()
454 shp->st.trap[SH_ERRTRAP] = 0; in sh_chktrap()
455 sh_trap(shp,trap,0); in sh_chktrap()
456 shp->st.trap[SH_ERRTRAP] = trap; in sh_chktrap()
458 shp->trapnote = sav_trapnote; in sh_chktrap()
459 if(sh_isoption(shp,SH_ERREXIT)) in sh_chktrap()
461 struct checkpt *pp = (struct checkpt*)shp->jmplist; in sh_chktrap()
463 sh_exit(shp,shp->exitval); in sh_chktrap()
466 if(!shp->sigflag) in sh_chktrap()
468 if(shp->sigflag[SIGALRM]&SH_SIGALRM) in sh_chktrap()
469 sh_timetraps(shp); in sh_chktrap()
474 if((shp->sigflag[sig]&SH_SIGTRAP) || shp->siginfo && shp->siginfo[sig]) in sh_chktrap()
476 shp->sigflag[sig] &= ~SH_SIGTRAP; in sh_chktrap()
479 job_chldtrap(shp,shp->st.trapcom[SIGCHLD],1); in sh_chktrap()
482 if(trap=shp->st.trapcom[sig]) in sh_chktrap()
486 if(shp->siginfo) in sh_chktrap()
488 do ip = shp->siginfo[sig]; in sh_chktrap()
489 while (asocasptr(&shp->siginfo[sig],ip,0)!=ip); in sh_chktrap()
502 sh_trap(shp,trap,0); in sh_chktrap()
512 if(shp->siginfo[sig]) in sh_chktrap()
520 sig = shp->st.trapmax; in sh_chktrap()
529 void sh_exit_20120720(Shell_t *shp,register int xno) in sh_exit_20120720() argument
531 register struct checkpt *pp = (struct checkpt*)shp->jmplist; in sh_exit_20120720()
534 shp->exitval=xno; in sh_exit_20120720()
536 shp->exitval |= (sig=shp->lastsig); in sh_exit_20120720()
539 if(shp->procsub) in sh_exit_20120720()
540 *shp->procsub = 0; in sh_exit_20120720()
542 if((shp->trapnote&SH_SIGTSTP) && job.jobcontrol) in sh_exit_20120720()
545 shp->trapnote = 0; in sh_exit_20120720()
546 shp->sigflag[SIGTSTP] = 0; in sh_exit_20120720()
547 if(!shp->subshell && sh_isstate(shp,SH_MONITOR) && !sh_isstate(shp,SH_STOPOK)) in sh_exit_20120720()
549 if(sh_isstate(shp,SH_TIMING)) in sh_exit_20120720()
552 shp->lastsig = 0; in sh_exit_20120720()
553 sh_onstate(shp,SH_MONITOR); in sh_exit_20120720()
554 sh_offstate(shp,SH_STOPOK); in sh_exit_20120720()
555 shp->trapnote = 0; in sh_exit_20120720()
556 shp->forked = 1; in sh_exit_20120720()
557 if(!shp->subshell && (sig=sh_fork(shp,0,NIL(int*)))) in sh_exit_20120720()
562 shp->forked = 0; in sh_exit_20120720()
564 shp->sigflag[SIGTSTP] = 0; in sh_exit_20120720()
566 shp->exitval = (SH_EXITSIG|SIGTSTP); in sh_exit_20120720()
572 if(shp->subshell) in sh_exit_20120720()
575 sh_offstate(shp,SH_STOPOK); in sh_exit_20120720()
576 sh_offstate(shp,SH_MONITOR); in sh_exit_20120720()
577 shp->sigflag[SIGTSTP] = 0; in sh_exit_20120720()
581 job_clear(shp); in sh_exit_20120720()
582 shp->exitval = (xno&SH_EXITMASK); in sh_exit_20120720()
588 sh_offstate(shp,SH_NOTRACK); in sh_exit_20120720()
589 if(!(pool=sfpool(NIL(Sfio_t*),shp->outpool,SF_WRITE))) in sh_exit_20120720()
590 pool = shp->outpool; /* can't happen? */ in sh_exit_20120720()
593 if(shp->lastsig==SIGPIPE) in sh_exit_20120720()
598 sh_done(shp,sig); in sh_exit_20120720()
599 shp->intrace = 0; in sh_exit_20120720()
600 shp->prefix = 0; in sh_exit_20120720()
601 shp->mktype = 0; in sh_exit_20120720()
605 sh_done(shp,sig); in sh_exit_20120720()
613 Shell_t *shp = sh_getinterp(); in sh_exit() local
614 register struct checkpt *pp = (struct checkpt*)shp->jmplist; in sh_exit()
617 sh_exit_20120720(shp,xno); in sh_exit()
634 Shell_t *shp = (Shell_t*)ptr; in sh_done() local
636 register int savxit = shp->exitval; in sh_done()
637 shp->trapnote = 0; in sh_done()
641 if(shp->userinit) in sh_done()
642 (*shp->userinit)(shp, -1); in sh_done()
643 if(shp->st.trapcom && (t=shp->st.trapcom[0])) in sh_done()
645 shp->st.trapcom[0]=0; /*should free but not long */ in sh_done()
646 shp->oldexit = savxit; in sh_done()
647 sh_trap(shp,t,0); in sh_done()
648 savxit = shp->exitval; in sh_done()
653 sh_offstate(shp,SH_ERREXIT); in sh_done()
654 sh_chktrap(shp); in sh_done()
656 if(shp->var_tree) in sh_done()
657 nv_scan(shp->var_tree,array_notify,(void*)0,NV_ARRAY,NV_ARRAY); in sh_done()
658 sh_freeup(shp); in sh_done()
662 if(mbwide()||sh_isoption(shp,SH_EMACS)||sh_isoption(shp,SH_VI)||sh_isoption(shp,SH_GMACS)) in sh_done()
665 …if((sh_isoption(shp,SH_INTERACTIVE) && shp->login_sh) || (!sh_isoption(shp,SH_INTERACTIVE) && (sig… in sh_done()
666 job_walk(shp,sfstderr,job_terminate,SIGHUP,NIL(char**)); in sh_done()
668 job_close(shp); in sh_done()
669 if(shp->var_tree && nv_search("VMTRACE", shp->var_tree,0)) in sh_done()
672 sfsync((Sfio_t*)shp->outpool); in sh_done()
696 if(sh_isoption(shp,SH_NOEXEC)) in sh_done()
697 kiaclose((Lex_t*)shp->lex_context); in sh_done()
699 if(shp->pwdfd >=0) in sh_done()
700 close(shp->pwdfd); in sh_done()
708 static char *sig_name(Shell_t *shp,int sig, char* buf, int pfx) in sig_name() argument
713 if(sig>shp->gd->sigruntime[SH_SIGRTMIN] && sig<shp->gd->sigruntime[SH_SIGRTMAX]) in sig_name()
718 …if(sig>shp->gd->sigruntime[SH_SIGRTMIN]+(shp->gd->sigruntime[SH_SIGRTMAX]-shp->gd->sigruntime[SH_S… in sig_name()
723 sig = shp->gd->sigruntime[SH_SIGRTMAX]-sig; in sig_name()
730 sig = sig-shp->gd->sigruntime[SH_SIGRTMIN]; in sig_name()
751 void sh_siglist(register Shell_t *shp,Sfio_t *iop,register int flag) in sh_siglist() argument
763 for(sig=shp->gd->sigmax-1; sig>=0; sig--) in sh_siglist()
771 if (((tp->sh_number>>SH_SIGBITS) & SH_SIGRUNTIME) && (sig = shp->gd->sigruntime[sig-1]+1) == 1) in sh_siglist()
784 sfputr(iop, sig_name(shp,flag-1,name,0), '\n'); in sh_siglist()
789 sig = shp->st.trapmax; in sh_siglist()
791 trapcom = (shp->st.otrapcom?shp->st.otrapcom:shp->st.trapcom); in sh_siglist()
796 if(sig >= shp->gd->sigmax || !(sname=(char*)names[sig])) in sh_siglist()
797 sname = sig_name(shp,sig,name,1); in sh_siglist()
802 if(!(trap=shp->st.otrap?shp->st.otrap[sig]:shp->st.trap[sig])) in sh_siglist()
810 for(sig=1; sig < shp->gd->sigmax; sig++) in sh_siglist()
814 sname = sig_name(shp,sig,name,1); in sh_siglist()
816 sname = stkcopy(shp->stk,sname); in sh_siglist()
826 sh_menu(shp,iop,shp->gd->sigmax,(char**)names+1); in sh_siglist()
836 int sh_trap_20120720(Shell_t *shp,const char *trap, int mode) in sh_trap_20120720() argument
838 int jmpval, savxit = shp->exitval; in sh_trap_20120720()
839 int was_history = sh_isstate(shp,SH_HISTORY); in sh_trap_20120720()
840 int was_verbose = sh_isstate(shp,SH_VERBOSE); in sh_trap_20120720()
841 int staktop = stktell(shp->stk); in sh_trap_20120720()
842 char *savptr = stkfreeze(shp->stk,0); in sh_trap_20120720()
847 memcpy(ifstable,shp->ifstable,sizeof(ifstable)); in sh_trap_20120720()
848 sh_offstate(shp,SH_HISTORY); in sh_trap_20120720()
849 sh_offstate(shp,SH_VERBOSE); in sh_trap_20120720()
850 shp->intrap++; in sh_trap_20120720()
851 sh_pushcontext(shp,&buff,SH_JMPTRAP); in sh_trap_20120720()
856 sh_exec(shp,(Shnode_t*)trap,sh_isstate(shp,SH_ERREXIT)); in sh_trap_20120720()
864 sh_eval(shp,sp,0); in sh_trap_20120720()
874 savxit = shp->exitval; in sh_trap_20120720()
878 sh_popcontext(shp,&buff); in sh_trap_20120720()
879 shp->intrap--; in sh_trap_20120720()
880 sfsync(shp->outpool); in sh_trap_20120720()
881 if(!shp->indebug && jmpval!=SH_JMPEXIT && jmpval!=SH_JMPFUN) in sh_trap_20120720()
882 shp->exitval=savxit; in sh_trap_20120720()
883 stkset(shp->stk,savptr,staktop); in sh_trap_20120720()
885 memcpy(shp->ifstable,ifstable,sizeof(ifstable)); in sh_trap_20120720()
887 sh_onstate(shp,SH_HISTORY); in sh_trap_20120720()
889 sh_onstate(shp,SH_VERBOSE); in sh_trap_20120720()
890 exitset(shp); in sh_trap_20120720()
891 …if(jmpval>SH_JMPTRAP && (((struct checkpt*)shp->jmpbuffer)->prev || ((struct checkpt*)shp->jmpbuff… in sh_trap_20120720()
892 siglongjmp(*shp->jmplist,jmpval); in sh_trap_20120720()
893 return(shp->exitval); in sh_trap_20120720()
899 Shell_t *shp = sh_getinterp(); in sh_trap() local
900 return(sh_trap_20120720(shp,trap,mode)); in sh_trap()