blob: 450f5c7c1b809fffa2fe4179942377f288610c78 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
|
########################################################################
# #
# This software is part of the ast package #
# Copyright (c) 1985-2010 AT&T Intellectual Property #
# and is licensed under the #
# Common Public License, Version 1.0 #
# by AT&T Intellectual Property #
# #
# A copy of the License is available at #
# http://www.opensource.org/licenses/cpl1.0.txt #
# (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) #
# #
# Information and Software Systems Research #
# AT&T Research #
# Florham Park NJ #
# #
# Glenn Fowler <gsf@research.att.com> #
# David Korn <dgk@research.att.com> #
# Phong Vo <kpv@research.att.com> #
# #
########################################################################
: generate sig features
case $# in
0) ;;
*) eval $1
shift
;;
esac
echo "#include <signal.h>
int xxx;" > $tmp.c
$cc -c $tmp.c >/dev/null 2>$tmp.e
echo "#pragma prototyped
#define sig_info _sig_info_
#if defined(__STDPP__directive) && defined(__STDPP__hide)
__STDPP__directive pragma pp:hide kill killpg
#else
#define kill ______kill
#define killpg ______killpg
#endif
#include <signal.h>
#if defined(__STDPP__directive) && defined(__STDPP__hide)
__STDPP__directive pragma pp:nohide kill killpg
#else
#undef kill
#undef killpg
#endif
#ifndef sigmask
#define sigmask(s) (1<<((s)-1))
#endif"
echo "#include <signal.h>
#ifdef TYPE
#if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus)
typedef TYPE (*Sig_handler_t)(ARG);
#else
typedef TYPE (*Sig_handler_t)();
#endif
#endif
Sig_handler_t f()
{
Sig_handler_t handler;
handler = signal(1, SIG_IGN);
return(handler);
}" > $tmp.c
if $cc -c $tmp.c >/dev/null
then :
else e=`wc -l $tmp.e`
i1= j1=
for i in void int
do for j in int,... ... int
do $cc -c -DTYPE=$i -DARG=$j $tmp.c >/dev/null 2>$tmp.e || continue
case `wc -l $tmp.e` in
$e) i1= j1=; break 2 ;;
esac
case $i1 in
"") i1=$i j1=$j ;;
esac
done
done
case $i1 in
?*) i=$i1 j=$j1 ;;
esac
echo "typedef $i (*Sig_handler_t)($j);"
fi
echo '
#define Handler_t Sig_handler_t
#define SIG_REG_PENDING (-1)
#define SIG_REG_POP 0
#define SIG_REG_EXEC 00001
#define SIG_REG_PROC 00002
#define SIG_REG_TERM 00004
#define SIG_REG_ALL 00777
#define SIG_REG_SET 01000
typedef struct
{
char** name;
char** text;
int sigmax;
} Sig_info_t;
extern int kill(pid_t, int);
extern int killpg(pid_t, int);
#if _BLD_ast && defined(__EXPORT__)
#define extern extern __EXPORT__
#endif
#if !_BLD_ast && defined(__IMPORT__)
#define extern extern __IMPORT__
#endif
extern Sig_info_t sig_info;
#undef extern
#if _lib_sigflag && _npt_sigflag
extern int sigflag(int, int, int);
#endif
#if _BLD_ast && defined(__EXPORT__)
#define extern __EXPORT__
#endif
#if !_lib_sigflag
extern int sigflag(int, int, int);
#endif
extern int sigcritical(int);
extern int sigunblock(int);
#undef extern'
|