Lines Matching refs:shp

56 static void	chkmail(Shell_t *shp, char*);
94 bool sh_source(Shell_t *shp, Sfio_t *iop, const char *file) in sh_source() argument
100 if (!file || !*file || (fd = path_open(shp,file, PATHCOMP)) < 0) in sh_source()
107 shp->st.filename = path_fullname(shp,stkptr(shp->stk,PATH_OFFSET)); in sh_source()
109 exfile(shp, iop, fd); in sh_source()
126 register Shell_t *shp; in sh_main() local
146 shp = sh_init(ac,av,userinit); in sh_main()
148 if(rshflag=sh_isoption(shp,SH_RESTRICTED)) in sh_main()
149 sh_offoption(shp,SH_RESTRICTED); in sh_main()
150 if(sigsetjmp(*((sigjmp_buf*)shp->jmpbuffer),0)) in sh_main()
153 sh_reinit(shp,(char**)0); in sh_main()
154 shp->gd->pid = getpid(); in sh_main()
155 shp->gd->ppid = getppid(); in sh_main()
157 shp->fn_depth = shp->dot_depth = 0; in sh_main()
160 srand(shp->gd->pid&0x7fff); in sh_main()
163 path_pwd(shp,1); in sh_main()
166 sh_onoption(shp,SH_BRACEEXPAND); in sh_main()
170 sh_onstate(shp,SH_PROFILE); in sh_main()
171 ((Lex_t*)shp->lex_context)->nonstandard = 0; in sh_main()
172 if(shp->gd->ppid==1) in sh_main()
173 shp->login_sh++; in sh_main()
174 if(shp->login_sh >= 2) in sh_main()
175 sh_onoption(shp,SH_LOGIN_SHELL); in sh_main()
177 if(!sh_isoption(shp,SH_INTERACTIVE) && !sh_isoption(shp,SH_TFLAG) && !sh_isoption(shp,SH_CFLAG) && in sh_main()
178 sh_isoption(shp,SH_SFLAG) && tty_check(0) && tty_check(ERRIO)) in sh_main()
179 sh_onoption(shp,SH_INTERACTIVE); in sh_main()
180 if(sh_isoption(shp,SH_INTERACTIVE)) in sh_main()
182 sh_onoption(shp,SH_BGNICE); in sh_main()
183 sh_onoption(shp,SH_RC); in sh_main()
185 if(!sh_isoption(shp,SH_RC) && (sh_isoption(shp,SH_BASH) && !sh_isoption(shp,SH_POSIX) in sh_main()
190 sh_onoption(shp,SH_RC); in sh_main()
191 for(i=0; i<elementsof(shp->offoptions.v); i++) in sh_main()
192 shp->options.v[i] &= ~shp->offoptions.v[i]; in sh_main()
193 if(sh_isoption(shp,SH_INTERACTIVE)) in sh_main()
201 sh_onoption(shp,SH_MONITOR); in sh_main()
203 job_init(shp,sh_isoption(shp,SH_LOGIN_SHELL)); in sh_main()
204 if(sh_isoption(shp,SH_LOGIN_SHELL)) in sh_main()
207 sh_source(shp, iop, e_sysprofile); in sh_main()
208 if(!sh_isoption(shp,SH_NOUSRPROFILE) && !sh_isoption(shp,SH_PRIVILEGED)) in sh_main()
210 char **files = shp->gd->login_files; in sh_main()
211 while ((name = *files++) && !sh_source(shp, iop, sh_mactry(shp,name))); in sh_main()
215 path_pwd(shp,1); in sh_main()
216 if(!sh_isoption(shp,SH_NOEXEC)) in sh_main()
218 … if(!sh_isoption(shp,SH_NOUSRPROFILE) && !sh_isoption(shp,SH_PRIVILEGED) && sh_isoption(shp,SH_RC)) in sh_main()
221 if(sh_isoption(shp,SH_BASH) && !sh_isoption(shp,SH_POSIX)) in sh_main()
224 sh_source(shp, iop, e_bash_sysrc); in sh_main()
226 sh_source(shp, iop, shp->gd->rcfile ? shp->gd->rcfile : sh_mactry(shp,(char*)e_bash_rc)); in sh_main()
231 if(name = sh_mactry(shp,nv_getval(ENVNOD))) in sh_main()
235 sh_source(shp, iop, e_sysrc); in sh_main()
239 sh_source(shp, iop, name); in sh_main()
244 else if(sh_isoption(shp,SH_INTERACTIVE) && sh_isoption(shp,SH_PRIVILEGED)) in sh_main()
245 sh_source(shp, iop, e_suidprofile); in sh_main()
249 if(sh_isoption(shp,SH_XTRACE)) in sh_main()
252 sh_offoption(shp,SH_XTRACE); in sh_main()
254 if(sh_isoption(shp,SH_NOEXEC)) in sh_main()
257 sh_offoption(shp,SH_NOEXEC); in sh_main()
259 if(sh_isoption(shp,SH_VERBOSE)) in sh_main()
262 sh_offoption(shp,SH_VERBOSE); in sh_main()
264 sh_trap(shp,"enum _Bool=(false true) ;",0); in sh_main()
266 sh_onoption(shp,SH_XTRACE); in sh_main()
268 sh_onoption(shp,SH_NOEXEC); in sh_main()
270 sh_onoption(shp,SH_VERBOSE); in sh_main()
271 shp->st.cmdname = error_info.id = command; in sh_main()
272 sh_offstate(shp,SH_PROFILE); in sh_main()
274 sh_onoption(shp,SH_RESTRICTED); in sh_main()
276 if(shp->comdiv) in sh_main()
279 iop = sfnew(NIL(Sfio_t*),shp->comdiv,strlen(shp->comdiv),0,SF_STRING|SF_READ); in sh_main()
284 error_info.id = shp->shname; in sh_main()
285 if(sh_isoption(shp,SH_SFLAG)) in sh_main()
311 shp->st.dolv[0] = av[0]; in sh_main()
312 fixargs(shp->st.dolv,1); in sh_main()
316 sh_offoption(shp,SH_VERBOSE); in sh_main()
317 sh_offoption(shp,SH_XTRACE); in sh_main()
329 shp->st.filename = path_fullname(shp,name); in sh_main()
334 if(path_absolute(shp,name,NIL(Pathcomp_t*))) in sh_main()
335 sp = stkptr(shp->stk,PATH_OFFSET); in sh_main()
337 sp = path_absolute(shp,name,NIL(char*)); in sh_main()
342 shp->st.filename = path_fullname(shp,sp); in sh_main()
353 sh_onoption(shp,SH_CFLAG); in sh_main()
354 shp->comdiv = (char*)malloc(strlen(name)+7); in sh_main()
355 name = strcopy(shp->comdiv,name); in sh_main()
356 if(shp->st.dolc) in sh_main()
361 fdin = sh_iomovefd(shp,fdin); in sh_main()
363 shp->readscript = shp->shname; in sh_main()
366 shp->comdiv--; in sh_main()
376 fdin = shp->infd; in sh_main()
377 fixargs(shp->st.dolv,1); in sh_main()
379 if(sh_isoption(shp,SH_INTERACTIVE)) in sh_main()
380 sh_onstate(shp,SH_INTERACTIVE); in sh_main()
382 exfile(shp,iop,fdin); in sh_main()
383 sh_done(shp,0); in sh_main()
393 static void exfile(register Shell_t *shp, register Sfio_t *iop,register int fno) in exfile() argument
400 sh_pushcontext(shp,&buff,SH_JMPERREXIT); in exfile()
402 nv_putval(SH_PATHNAMENOD, shp->st.filename ,NV_NOFREE); in exfile()
410 shp->fdstatus[r] = shp->fdstatus[fno]; in exfile()
415 shp->fdstatus[fno] |= IOCLEX; in exfile()
416 iop = sh_iostream((void*)shp,fno,fno); in exfile()
423 shp->infd = fno; in exfile()
424 if(sh_isstate(shp,SH_INTERACTIVE)) in exfile()
427 nv_putval(PS1NOD,(shp->gd->euserid?e_stdprompt:e_supprompt),NV_RDONLY); in exfile()
428 sh_sigdone(shp); in exfile()
429 if(sh_histinit((void*)shp)) in exfile()
430 sh_onoption(shp,SH_HISTORY); in exfile()
434 if(!sh_isstate(shp,SH_PROFILE)) in exfile()
437 sh_onoption(shp,SH_TRACKALL); in exfile()
439 sh_offstate(shp,SH_INTERACTIVE); in exfile()
440 if(sh_isoption(shp,SH_MONITOR)) in exfile()
441 sh_onstate(shp,SH_MONITOR); in exfile()
442 sh_offstate(shp,SH_HISTORY); in exfile()
443 sh_offoption(shp,SH_HISTORY); in exfile()
445 states = sh_getstate(shp); in exfile()
450 sh_iorestore((void*)shp,0,jmpval); in exfile()
451 hist_flush(shp->gd->hist_ptr); in exfile()
452 sfsync(shp->outpool); in exfile()
453 shp->st.execbrk = shp->st.breakcnt = 0; in exfile()
455 if(sh_isstate(shp,SH_PROFILE) && (jmpval==SH_JMPFUN || jmpval==SH_JMPEXIT)) in exfile()
457 sh_setstate(shp,states); in exfile()
460 …if(!sh_isoption(shp,SH_INTERACTIVE) || sh_isstate(shp,SH_FORKED) || (jmpval > SH_JMPERREXIT && job… in exfile()
462 sh_offstate(shp,SH_INTERACTIVE); in exfile()
463 sh_offstate(shp,SH_MONITOR); in exfile()
466 exitset(shp); in exfile()
477 tcsetpgrp(job.fd,shp->gd->pid); in exfile()
482 sh_setstate(shp,states); in exfile()
483 shp->st.optindex = 1; in exfile()
485 shp->st.loopcnt = 0; in exfile()
486 shp->trapnote = 0; in exfile()
487 shp->intrap = 0; in exfile()
489 shp->inlineno = 1; in exfile()
490 shp->binscript = 0; in exfile()
496 shp->nextprompt = 1; in exfile()
497 sh_freeup(shp); in exfile()
498 stkset(shp->stk,NIL(char*),0); in exfile()
499 sh_offstate(shp,SH_STOPOK); in exfile()
500 sh_offstate(shp,SH_ERREXIT); in exfile()
501 sh_offstate(shp,SH_VERBOSE); in exfile()
502 sh_offstate(shp,SH_TIMING); in exfile()
503 sh_offstate(shp,SH_GRACE); in exfile()
504 sh_offstate(shp,SH_TTYWAIT); in exfile()
505 if(sh_isoption(shp,SH_VERBOSE)) in exfile()
506 sh_onstate(shp,SH_VERBOSE); in exfile()
507 sh_onstate(shp,SH_ERREXIT); in exfile()
509 if(sh_isstate(shp,SH_PROFILE)) in exfile()
511 sh_offstate(shp,SH_INTERACTIVE); in exfile()
512 sh_offstate(shp,SH_ERREXIT); in exfile()
513 sh_offstate(shp,SH_MONITOR); in exfile()
515 if(sh_isstate(shp,SH_INTERACTIVE) && !tdone) in exfile()
519 sh_offstate(shp,SH_MONITOR); in exfile()
520 if(sh_isoption(shp,SH_MONITOR)) in exfile()
521 sh_onstate(shp,SH_MONITOR); in exfile()
524 job_walk(shp,sfstderr,job_list,JOB_NFLAG,(char**)0); in exfile()
533 chkmail(shp,mail); in exfile()
537 if(shp->gd->hist_ptr) in exfile()
538 hist_eof(shp->gd->hist_ptr); in exfile()
540 shp->timeout = shp->st.tmout; in exfile()
542 if(shp->timeout <= 0 || shp->timeout > SHOPT_TIMEOUT) in exfile()
543 shp->timeout = SHOPT_TIMEOUT; in exfile()
545 shp->inlineno = 1; in exfile()
547 shp->trapnote = 0; in exfile()
560 if(sh_isstate(shp,SH_INTERACTIVE) && !sferror(iop)) in exfile()
562 if(--maxtry>0 && sh_isoption(shp,SH_IGNOREEOF) && in exfile()
563 !sferror(sfstderr) && (shp->fdstatus[fno]&IOTTY)) in exfile()
569 else if(job_close(shp)<0) in exfile()
580 shp->exitval = shp->savexit; in exfile()
582 if(sh_isstate(shp,SH_INTERACTIVE) && shp->gd->hist_ptr) in exfile()
585 hist_eof(shp->gd->hist_ptr); in exfile()
588 if(sh_isoption(shp,SH_HISTORY)) in exfile()
589 sh_onstate(shp,SH_HISTORY); in exfile()
592 t = (Shnode_t*)sh_parse(shp,iop,0); in exfile()
593 if(!sh_isstate(shp,SH_INTERACTIVE) && !sh_isoption(shp,SH_CFLAG)) in exfile()
595 shp->readscript = 0; in exfile()
596 if(sh_isstate(shp,SH_INTERACTIVE) && shp->gd->hist_ptr) in exfile()
597 hist_flush(shp->gd->hist_ptr); in exfile()
598 sh_offstate(shp,SH_HISTORY); in exfile()
603 if(!sh_isstate(shp,SH_PROFILE) && sh_isoption(shp,SH_CFLAG) && in exfile()
604 (fno<0 || !(shp->fdstatus[fno]&(IOTTY|IONOSEEK))) in exfile()
609 shp->st.execbrk = 0; in exfile()
610 sh_exec(shp,t,execflags); in exfile()
611 if(shp->forked) in exfile()
613 sh_offstate(shp,SH_INTERACTIVE); in exfile()
617 if(sh_isoption(shp,SH_TFLAG) && !sh_isstate(shp,SH_PROFILE)) in exfile()
622 sh_popcontext(shp,&buff); in exfile()
623 if(sh_isstate(shp,SH_INTERACTIVE)) in exfile()
626 job_close(shp); in exfile()
629 siglongjmp(*shp->jmplist,jmpval); in exfile()
631 sh_done(shp,0); in exfile()
634 if(shp->st.filename) in exfile()
635 free((void*)shp->st.filename); in exfile()
636 shp->st.filename = 0; in exfile()
641 static void chkmail(Shell_t *shp, char *files) in chkmail() argument
646 int offset = stktell(shp->stk); in chkmail()
647 char *savstak=stkptr(shp->stk,0); in chkmail()
675 path_complete(shp,cp,"/*",&arglist); in chkmail()
690 char *save = shp->lastarg; in chkmail()
691 shp->lastarg = cp; in chkmail()
692 errormsg(SH_DICT,0,sh_mactry(shp,qp?qp+1:(char*)e_mailmsg)); in chkmail()
693 shp->lastarg = save; in chkmail()
714 stkset(shp->stk,savstak,offset); in chkmail()