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