1
0
mirror of https://github.com/moparisthebest/pacman synced 2024-12-23 08:18:51 -05:00

Use sigaction instead of signal.

From signal man page :
"The behavior of signal() varies across Unix versions, and has also varied
historically across different versions of Linux. Avoid its use: use
sigaction(2) instead. See Portability below."

The code was taken from there :
http://www.gnu.org/software/libtool/manual/libc/Sigaction-Function-Example.html

Signed-off-by: Chantry Xavier <shiningxc@gmail.com>
Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
Chantry Xavier 2008-03-09 13:12:32 +01:00 committed by Dan McGee
parent 2f9f48eddd
commit 51e0303e84

View File

@ -752,6 +752,7 @@ static int parseconfig(const char *file)
int main(int argc, char *argv[])
{
int ret = 0;
struct sigaction new_action, old_action;
#if defined(HAVE_GETEUID)
/* geteuid undefined in CYGWIN */
uid_t myuid = geteuid();
@ -762,10 +763,24 @@ int main(int argc, char *argv[])
mtrace();
#endif
/* set signal handlers */
signal(SIGINT, handler);
signal(SIGTERM, handler);
signal(SIGSEGV, handler);
/* Set signal handlers */
/* Set up the structure to specify the new action. */
new_action.sa_handler = handler;
sigemptyset(&new_action.sa_mask);
new_action.sa_flags = 0;
sigaction(SIGINT, NULL, &old_action);
if(old_action.sa_handler != SIG_IGN) {
sigaction(SIGINT, &new_action, NULL);
}
sigaction(SIGTERM, NULL, &old_action);
if(old_action.sa_handler != SIG_IGN) {
sigaction(SIGTERM, &new_action, NULL);
}
sigaction(SIGSEGV, NULL, &old_action);
if(old_action.sa_handler != SIG_IGN) {
sigaction(SIGSEGV, &new_action, NULL);
}
/* i18n init */
#if defined(ENABLE_NLS)