fault.h revision 7c2fbfb345896881c631598ee3852ce9ce33fb07
1N/A/***********************************************************************
1N/A* *
1N/A* This software is part of the ast package *
1N/A* Copyright (c) 1982-2008 AT&T Intellectual Property *
1N/A* and is licensed under the *
1N/A* Common Public License, Version 1.0 *
1N/A* by AT&T Intellectual Property *
1N/A* *
1N/A* A copy of the License is available at *
1N/A* http://www.opensource.org/licenses/cpl1.0.txt *
1N/A* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
1N/A* *
1N/A* Information and Software Systems Research *
1N/A* AT&T Research *
1N/A* Florham Park NJ *
1N/A* *
1N/A* David Korn <dgk@research.att.com> *
1N/A* *
1N/A***********************************************************************/
1N/A#pragma prototyped
1N/A#ifndef SH_SIGBITS
1N/A/*
1N/A * UNIX shell
1N/A * S. R. Bourne
1N/A * Rewritten by David Korn
1N/A *
1N/A */
1N/A
1N/A#include <sig.h>
1N/A#include <setjmp.h>
1N/A#include <error.h>
1N/A#include <sfio.h>
1N/A#include "FEATURE/setjmp"
1N/A#include "FEATURE/sigfeatures"
1N/A
1N/A
1N/A#ifndef SIGWINCH
1N/A# ifdef SIGWIND
1N/A# define SIGWINCH SIGWIND
1N/A# else
1N/A# ifdef SIGWINDOW
1N/A# define SIGWINCH SIGWINDOW
1N/A# endif
1N/A# endif
1N/A#endif
1N/A
1N/Atypedef void (*SH_SIGTYPE)(int,void(*)(int));
1N/A
1N/A#define SH_FORKLIM 16 /* fork timeout interval */
1N/A
1N/A#define SH_TRAP 0200 /* bit for internal traps */
1N/A#define SH_ERRTRAP 0 /* trap for non-zero exit status */
1N/A#define SH_KEYTRAP 1 /* trap for keyboard event */
1N/A#define SH_DEBUGTRAP 4 /* must be last internal trap */
1N/A
1N/A#define SH_SIGBITS 8
1N/A#define SH_SIGFAULT 1 /* signal handler is sh_fault */
1N/A#define SH_SIGOFF 2 /* signal handler is SIG_IGN */
1N/A#define SH_SIGSET 4 /* pending signal */
1N/A#define SH_SIGTRAP 010 /* pending trap */
1N/A#define SH_SIGDONE 020 /* default is exit */
1N/A#define SH_SIGIGNORE 040 /* default is ingore signal */
1N/A#define SH_SIGINTERACTIVE 0100 /* handle interactive specially */
1N/A#define SH_SIGTSTP 0200 /* tstp signal received */
1N/A#define SH_SIGALRM 0200 /* timer alarm received */
1N/A#define SH_SIGTERM SH_SIGOFF /* term signal received */
1N/A#define SH_SIGRUNTIME 0400 /* runtime value */
1N/A
1N/A#define SH_SIGRTMIN 0 /* sh.sigruntime[] index */
1N/A#define SH_SIGRTMAX 1 /* sh.sigruntime[] index */
1N/A
1N/A/*
1N/A * These are longjmp values
1N/A */
1N/A
1N/A#define SH_JMPDOT 2
1N/A#define SH_JMPEVAL 3
1N/A#define SH_JMPTRAP 4
1N/A#define SH_JMPIO 5
1N/A#define SH_JMPCMD 6
1N/A#define SH_JMPFUN 7
1N/A#define SH_JMPERRFN 8
1N/A#define SH_JMPSUB 9
1N/A#define SH_JMPERREXIT 10
1N/A#define SH_JMPEXIT 11
1N/A#define SH_JMPSCRIPT 12
1N/A
1N/Astruct openlist
1N/A{
1N/A Sfio_t *strm;
1N/A struct openlist *next;
1N/A};
1N/A
1N/Astruct checkpt
1N/A{
1N/A sigjmp_buf buff;
1N/A sigjmp_buf *prev;
1N/A int topfd;
1N/A int mode;
1N/A struct openlist *olist;
1N/A#if (ERROR_VERSION >= 20030214L)
1N/A Error_context_t err;
1N/A#else
1N/A struct errorcontext err;
1N/A#endif
1N/A};
1N/A
1N/A#define sh_pushcontext(bp,n) ( (bp)->mode=(n) , (bp)->olist=0, \
1N/A (bp)->topfd=sh.topfd, (bp)->prev=sh.jmplist, \
1N/A (bp)->err = *ERROR_CONTEXT_BASE, \
1N/A sh.jmplist = (sigjmp_buf*)(&(bp)->buff) \
1N/A )
1N/A#define sh_popcontext(bp) (sh.jmplist=(bp)->prev, errorpop(&((bp)->err)))
1N/A
1N/Aextern void sh_fault(int);
1N/Aextern void sh_done(void*,int);
1N/Aextern void sh_chktrap(void);
1N/Aextern void sh_sigclear(int);
1N/Aextern void sh_sigdone(void);
1N/Aextern void sh_siginit(void*);
1N/Aextern void sh_sigtrap(int);
1N/Aextern void sh_sigreset(int);
1N/Aextern void sh_timetraps(void);
1N/Aextern void *sh_timeradd(unsigned long,int ,void (*)(void*),void*);
1N/Aextern void timerdel(void*);
1N/A
1N/Aextern const char e_alarm[];
1N/A
1N/A#endif /* !SH_SIGBITS */
1N/A