xref: /onnv-gate/usr/src/lib/libast/common/features/sig.sh (revision 12068:08a39a083754)
14887Schin########################################################################
24887Schin#                                                                      #
34887Schin#               This software is part of the ast package               #
4*12068SRoger.Faulkner@Oracle.COM#          Copyright (c) 1985-2010 AT&T Intellectual Property          #
54887Schin#                      and is licensed under the                       #
64887Schin#                  Common Public License, Version 1.0                  #
78462SApril.Chin@Sun.COM#                    by AT&T Intellectual Property                     #
84887Schin#                                                                      #
94887Schin#                A copy of the License is available at                 #
104887Schin#            http://www.opensource.org/licenses/cpl1.0.txt             #
114887Schin#         (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9)         #
124887Schin#                                                                      #
134887Schin#              Information and Software Systems Research               #
144887Schin#                            AT&T Research                             #
154887Schin#                           Florham Park NJ                            #
164887Schin#                                                                      #
174887Schin#                 Glenn Fowler <gsf@research.att.com>                  #
184887Schin#                  David Korn <dgk@research.att.com>                   #
194887Schin#                   Phong Vo <kpv@research.att.com>                    #
204887Schin#                                                                      #
214887Schin########################################################################
224887Schin: generate sig features
234887Schincase $# in
244887Schin0)	;;
254887Schin*)	eval $1
264887Schin	shift
274887Schin	;;
284887Schinesac
294887Schinecho "#include <signal.h>
304887Schinint xxx;" > $tmp.c
314887Schin$cc -c $tmp.c >/dev/null 2>$tmp.e
324887Schinecho "#pragma prototyped
334887Schin#define sig_info	_sig_info_
344887Schin
354887Schin#if defined(__STDPP__directive) && defined(__STDPP__hide)
364887Schin__STDPP__directive pragma pp:hide kill killpg
374887Schin#else
384887Schin#define kill	______kill
394887Schin#define killpg	______killpg
404887Schin#endif
414887Schin#include <signal.h>
424887Schin#if defined(__STDPP__directive) && defined(__STDPP__hide)
434887Schin__STDPP__directive pragma pp:nohide kill killpg
444887Schin#else
454887Schin#undef	kill
464887Schin#undef	killpg
474887Schin#endif
484887Schin#ifndef sigmask
494887Schin#define sigmask(s)	(1<<((s)-1))
504887Schin#endif"
514887Schinecho "#include <signal.h>
524887Schin#ifdef TYPE
534887Schin#if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus)
544887Schintypedef TYPE (*Sig_handler_t)(ARG);
554887Schin#else
564887Schintypedef TYPE (*Sig_handler_t)();
574887Schin#endif
584887Schin#endif
594887SchinSig_handler_t f()
604887Schin{
614887Schin	Sig_handler_t	handler;
624887Schin	handler = signal(1, SIG_IGN);
634887Schin	return(handler);
644887Schin}" > $tmp.c
654887Schinif	$cc -c $tmp.c >/dev/null
664887Schinthen	:
674887Schinelse	e=`wc -l $tmp.e`
684887Schin	i1= j1=
694887Schin	for i in void int
704887Schin	do	for j in int,... ... int
714887Schin		do	$cc -c -DTYPE=$i -DARG=$j $tmp.c >/dev/null 2>$tmp.e || continue
724887Schin			case `wc -l $tmp.e` in
734887Schin			$e)	i1= j1=; break 2 ;;
744887Schin			esac
754887Schin			case $i1 in
764887Schin			"")	i1=$i j1=$j ;;
774887Schin			esac
784887Schin		done
794887Schin	done
804887Schin	case $i1 in
814887Schin	?*)	i=$i1 j=$j1 ;;
824887Schin	esac
834887Schin	echo "typedef $i (*Sig_handler_t)($j);"
844887Schinfi
854887Schinecho '
864887Schin
874887Schin#define Handler_t		Sig_handler_t
884887Schin
894887Schin#define SIG_REG_PENDING		(-1)
904887Schin#define SIG_REG_POP		0
914887Schin#define SIG_REG_EXEC		00001
924887Schin#define SIG_REG_PROC		00002
934887Schin#define SIG_REG_TERM		00004
944887Schin#define SIG_REG_ALL		00777
954887Schin#define SIG_REG_SET		01000
964887Schin
974887Schintypedef struct
984887Schin{
994887Schin	char**		name;
1004887Schin	char**		text;
1014887Schin	int		sigmax;
1024887Schin} Sig_info_t;
1034887Schin
1044887Schinextern int		kill(pid_t, int);
1054887Schinextern int		killpg(pid_t, int);
1064887Schin
1074887Schin#if _BLD_ast && defined(__EXPORT__)
1084887Schin#define extern		extern __EXPORT__
1094887Schin#endif
1104887Schin#if !_BLD_ast && defined(__IMPORT__)
1114887Schin#define extern		extern __IMPORT__
1124887Schin#endif
1134887Schin
1144887Schinextern Sig_info_t	sig_info;
1154887Schin
1164887Schin#undef	extern
1174887Schin
118*12068SRoger.Faulkner@Oracle.COM#if _lib_sigflag && _npt_sigflag
119*12068SRoger.Faulkner@Oracle.COMextern int		sigflag(int, int, int);
120*12068SRoger.Faulkner@Oracle.COM#endif
121*12068SRoger.Faulkner@Oracle.COM
1224887Schin#if _BLD_ast && defined(__EXPORT__)
1234887Schin#define extern		__EXPORT__
1244887Schin#endif
1254887Schin
126*12068SRoger.Faulkner@Oracle.COM#if !_lib_sigflag
127*12068SRoger.Faulkner@Oracle.COMextern int		sigflag(int, int, int);
128*12068SRoger.Faulkner@Oracle.COM#endif
1294887Schinextern int		sigcritical(int);
1304887Schinextern int		sigunblock(int);
1314887Schin
1324887Schin#undef	extern'
133