Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/cmd/ksh93/include/fault.h
1810 views
1
/***********************************************************************
2
* *
3
* This software is part of the ast package *
4
* Copyright (c) 1982-2011 AT&T Intellectual Property *
5
* and is licensed under the *
6
* Eclipse Public License, Version 1.0 *
7
* by AT&T Intellectual Property *
8
* *
9
* A copy of the License is available at *
10
* http://www.eclipse.org/org/documents/epl-v10.html *
11
* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
12
* *
13
* Information and Software Systems Research *
14
* AT&T Research *
15
* Florham Park NJ *
16
* *
17
* David Korn <[email protected]> *
18
* *
19
***********************************************************************/
20
#pragma prototyped
21
#ifndef SH_SIGBITS
22
/*
23
* UNIX shell
24
* S. R. Bourne
25
* Rewritten by David Korn
26
*
27
*/
28
29
#include <sig.h>
30
#include <setjmp.h>
31
#include <error.h>
32
#include <sfio.h>
33
#include "FEATURE/setjmp"
34
#include "FEATURE/sigfeatures"
35
36
37
#ifndef SIGWINCH
38
# ifdef SIGWIND
39
# define SIGWINCH SIGWIND
40
# else
41
# ifdef SIGWINDOW
42
# define SIGWINCH SIGWINDOW
43
# endif
44
# endif
45
#endif
46
47
typedef void (*SH_SIGTYPE)(int,void(*)(int));
48
49
#define SH_FORKLIM 16 /* fork timeout interval */
50
51
#define SH_TRAP 0200 /* bit for internal traps */
52
#define SH_ERRTRAP 0 /* trap for non-zero exit status */
53
#define SH_KEYTRAP 1 /* trap for keyboard event */
54
#define SH_DEBUGTRAP 4 /* must be last internal trap */
55
56
#define SH_SIGBITS 8
57
#define SH_SIGFAULT 1 /* signal handler is sh_fault */
58
#define SH_SIGOFF 2 /* signal handler is SIG_IGN */
59
#define SH_SIGSET 4 /* pending signal */
60
#define SH_SIGTRAP 010 /* pending trap */
61
#define SH_SIGDONE 020 /* default is exit */
62
#define SH_SIGIGNORE 040 /* default is ingore signal */
63
#define SH_SIGINTERACTIVE 0100 /* handle interactive specially */
64
#define SH_SIGTSTP 0200 /* tstp signal received */
65
#define SH_SIGALRM 0200 /* timer alarm received */
66
#define SH_SIGTERM SH_SIGOFF /* term signal received */
67
#define SH_SIGRUNTIME 0400 /* runtime value */
68
69
#define SH_SIGRTMIN 0 /* sh.sigruntime[] index */
70
#define SH_SIGRTMAX 1 /* sh.sigruntime[] index */
71
72
/*
73
* These are longjmp values
74
*/
75
76
#define SH_JMPDOT 2
77
#define SH_JMPEVAL 3
78
#define SH_JMPTRAP 4
79
#define SH_JMPIO 5
80
#define SH_JMPCMD 6
81
#define SH_JMPFUN 7
82
#define SH_JMPERRFN 8
83
#define SH_JMPSUB 9
84
#define SH_JMPERREXIT 10
85
#define SH_JMPEXIT 11
86
#define SH_JMPSCRIPT 12
87
88
struct openlist
89
{
90
Sfio_t *strm;
91
struct openlist *next;
92
};
93
94
struct checkpt
95
{
96
sigjmp_buf buff;
97
sigjmp_buf *prev;
98
int topfd;
99
int mode;
100
struct openlist *olist;
101
#if (ERROR_VERSION >= 20030214L)
102
Error_context_t err;
103
#else
104
struct errorcontext err;
105
#endif
106
};
107
108
#define sh_pushcontext(shp,bp,n)( (bp)->mode=(n) , (bp)->olist=0, \
109
(bp)->topfd=shp->topfd, (bp)->prev=shp->jmplist, \
110
(bp)->err = *ERROR_CONTEXT_BASE, \
111
shp->jmplist = (sigjmp_buf*)(&(bp)->buff) \
112
)
113
#define sh_popcontext(shp,bp) (shp->jmplist=(bp)->prev, errorpop(&((bp)->err)))
114
115
extern void sh_fault(int);
116
extern void sh_done(void*,int);
117
extern void sh_sigclear(int);
118
extern void sh_sigdone(void);
119
extern void sh_siginit(void*);
120
extern void sh_sigtrap(int);
121
extern void sh_sigreset(int);
122
extern void *sh_timeradd(unsigned long,int ,void (*)(void*),void*);
123
extern void timerdel(void*);
124
125
extern const char e_alarm[];
126
127
#endif /* !SH_SIGBITS */
128
129