From b0557a608b3df0fe83b7c34a0d0ba8c232d0f46d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Groenvall?= Date: Fri, 5 Jan 1996 17:06:39 +0000 Subject: [PATCH] New BSD compatible signal function git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@212 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/roken/signal.c | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 lib/roken/signal.c diff --git a/lib/roken/signal.c b/lib/roken/signal.c new file mode 100644 index 000000000..126fe3b4b --- /dev/null +++ b/lib/roken/signal.c @@ -0,0 +1,40 @@ +#include "bsd_locl.h" + +RCSID("$Id$"); + +/* + * Bugs: + * + * Do we need any extra hacks for SIGCLD and/or SIGCHLD? + */ + +typedef RETSIGTYPE (*SigAction)(/* int??? */); + + +SigAction +signal(int iSig, SigAction pAction) +{ + struct sigaction saNew, saOld; + + saNew.sa_handler = pAction; + sigemptyset(&saNew.sa_mask); + saNew.sa_flags = 0; + + if (iSig == SIGALRM) + { +#ifdef SA_INTERRUPT + saNew.sa_flags |= SA_INTERRUPT; +#endif + } + else + { +#ifdef SA_RESTART + saNew.sa_flags |= SA_RESTART; +#endif + } + + if (sigaction(iSig, &saNew, &saOld) < 0) + return(SIG_ERR); + + return(saOld.sa_handler); +}