1
0
mirror of https://github.com/moparisthebest/pacman synced 2025-01-10 21:38:19 -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 main(int argc, char *argv[])
{ {
int ret = 0; int ret = 0;
struct sigaction new_action, old_action;
#if defined(HAVE_GETEUID) #if defined(HAVE_GETEUID)
/* geteuid undefined in CYGWIN */ /* geteuid undefined in CYGWIN */
uid_t myuid = geteuid(); uid_t myuid = geteuid();
@ -762,10 +763,24 @@ int main(int argc, char *argv[])
mtrace(); mtrace();
#endif #endif
/* set signal handlers */ /* Set signal handlers */
signal(SIGINT, handler); /* Set up the structure to specify the new action. */
signal(SIGTERM, handler); new_action.sa_handler = handler;
signal(SIGSEGV, 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 */ /* i18n init */
#if defined(ENABLE_NLS) #if defined(ENABLE_NLS)